【发布时间】:2021-10-06 13:19:06
【问题描述】:
来自 WPFToolKit 的检查列表框。下面是 XAML 代码 (MainWindow.xaml)
<xctk:CheckListBox x:Name="SiteCheckList" Margin="0,0,512,0" Height="100" Width="150"
ItemsSource="{Binding SiteList}"
DisplayMemberPath="SiteName"
CheckedMemberPath="IsChecked">
</xctk:CheckListBox>
在模型类中添加的以下属性。我想从 CheckListBox 中获取 Checked Items 到我的字符串 List (Model.cs)。 我将在项目逻辑中进一步使用这个字符串列表。
private string _SiteName;
public string SiteName
{
get { return _SiteName; }
set { _SiteName = value; }
}
private List<string> _SelectedSiteList;
public List<string> SelectedSiteList
{
get { return _SelectedSiteList; }
set
{
_SelectedSiteList = value;
}
}
视图模型 (ViewModel.cs)
类 ViewModel : INotifyPropertyChanged {
private ObservableCollection<Model> _SiteList;
public ObservableCollection<DataModel> SiteList
{
get { return _SiteList; }
set { _SiteList = value; }
}
public ViewModel()
{
SiteList = new ObservableCollection<Model>();
PoppulateSiteNames();
}
private void PoppulateSiteNames()
{
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
keyValuePairs = Files.ReadIni_KeyValue("SiteSection");
foreach (string Key in keyValuePairs.Keys)
{
keyValuePairs.TryGetValue(Key, out string LogTable);
SiteList.Add(new Model() { SiteName = LogTable });
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string PropertyName)
{
if (PropertyChanged !=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
}
在这里,我想从 UI 中获取选中/选定项目的列表。如果我不想在 MainWindow.cs 中编写任何代码,即 CheckedChanged 事件,那么我该如何使用 Binding 方法呢?
【问题讨论】:
-
从CheckListBox的文档来看,所有选中的项都在SelectedItems集合中。如果您需要处理此列表,则将命令参数绑定到此属性。另外,如果collection元素有指定selected参数的属性,那么可以在SelectedMemberPath中指定。
-
一旦复选框发生变化,我如何触发。即项目检查更改?简而言之,如何绑定 Command 属性?
-
从哪里到哪里需要做什么?
-
从您的解释来看,尚不清楚哪种方法、哪个命令应该获取此列表。也没有 DataModel 类型代码。它是否具有指示所选项目的属性?代码中显示的
SiteList集合属性也不会编译,因为_SiteList字段的集合类型不同。完成您的问题并显示与该问题相关的 WORKING 代码。
标签: wpf mvvm binding checklistbox