如何分配一个布尔值列表生成的复选框IsChecked属性在WPF?



我最近开始学习c#,我遇到了一个问题。我在WPF中生成的复选框中显示了一组关键字,我想根据TXT文件的输入检查来检查元素(IsChecked)。如果当前从不同列表框中选择的元素与读取的modelclass(来自txt文件)匹配,则将选中的键设置为true。

我正在生成一个复选框在我的WPF列出一组关键字,我的应用程序从一个txt文件读取。txt文件每行包含以下内容:id关键一对描述

WPF代码:


<ListView ItemsSource="{Binding XAMLModelKeywords}" SelectedItem="{Binding XAMLModelKeyword}" Margin="5" x:Name="listofallkeys" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" >
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding XAMLAssignedKeys}" Content="{Binding Key}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

c#:

public ModelTemplates XAMLModelTemplate { get; set; }
public ModelKeywords XAMLModelKeyword { get; set; }
public List<bool> XAMLAssignedKeys { get; set; }

public string XAMLKeyword { get; set; }
public ViewModelMain()
{
//This creates a new instance of ObservableCollection above
XAMLModelTemplates = new ObservableCollection<ModelTemplates>();
XAMLModelKeywords = new ObservableCollection<ModelKeywords>();
XAMLAssignedKeys = new List<bool>();
Refresh();
}
public void Refresh()
{
XAMLModelTemplates.Clear();
foreach (ModelTemplates tpl in ReadInput.ReadTemplateDirectory(Path))
{
XAMLModelTemplates.Add(tpl);
}
//Selecting the first item from the returned list
XAMLModelTemplate = XAMLModelTemplates.FirstOrDefault();

XAMLModelKeywords.Clear();
foreach (ModelKeywords tpl in ReadInput.ReadKeywordsFile(KeyWordsPath))
{
XAMLModelKeywords.Add(tpl);
}
XAMLModelKeyword = XAMLModelKeywords.FirstOrDefault();

XAMLAssignedKeys.Clear();
foreach (ModelKeywords tpl in XAMLModelKeywords)
{

XAMLAssignedKeys.Add(ReadInput.CheckPairedtemplates(tpl, XAMLModelTemplate));
}

ModelKeyword:

public class ModelKeywords
{
public int Id { get; set; }
public string Key { get; set; }
public List<string> PairedTemplates { get; set; }
public string Description { get; set; }
}

ModelTemplate:

public class ModelTemplates
{
//path to a template
public int Id { get; set; }
public string TemplatePath { get; set; }
public string TemplateName { get; set; }
public ExcelRange TemplateRange { get; set; }
}

ReadKeywordsFile:返回模板模型列表(模板文件名,路径),并将其显示在列表框中。

ReadKeywordsFile:返回Keywords Model (id, key, pair, desc)的列表,然后将其显示在生成的列表框中。

CheckPairedtemplates:根据当前选择的模板模型匹配关键字模型对(字符串列表)返回一个布尔值列表。

TLDR:我有一个布尔值列表(XAMLAssignedKeys),我想将它匹配到我在WPF中生成的复选框,但是生成是基于一个项目模板发生的,我不确定如何将一个元素从我的布尔值列表链接到复选框"IsChecked"财产。

ScreenshotofApp

提前感谢您的建议。

既然你设置了ObservableCollection<(XAMLModelKeywords)到ListView (listofallkeys)的ItemsSource属性,ListView的每一项都将绑定到ObservableCollection的一个成员。在这种情况下,DataTemplate中的CheckBox将被绑定到XAMLModelKeywords中的ModelKeywords。因此,您需要将CheckBox的属性与ModelKeywords的属性绑定。

在Xaml中,您错误地将xamlassigndkeys设置为CheckBox的IsChecked属性。它必须是ModelKeywords的一个属性。补救办法是为ModelKeywords添加bool属性,以某种方式将XAMLAssignedKeys中的值复制到该属性,然后将该属性与CheckBox的IsChecked属性绑定。

让我们说,如果你添加IsEnabledbool属性到ModelKeywords, Xaml将是

<CheckBox IsChecked="{Binding IsEnabled}" Content="{Binding Key}"/>

此外,除非你将INotifyPropertyChanged接口实现到ModelKeywords,否则只有属性的初始值将被发送到CheckBox,并且当属性被更改时,后续的值将不会被通知并反映到CheckBox。

最新更新