我对如何使用绑定设置CheckBox
有点困惑,该绑定确保我的ViewModel中填充了所有选中的字段。我在底部提供了一些代码和说明。WPF TreeView复选框绑定 - 如何使用复选框填充ViewModel
我的XAML文件让我们把它TreeView.xaml
:
<TreeView x:Name="availableColumnsTreeView"
ItemsSource="{Binding Path=TreeFieldData, Mode=OneWay, Converter={StaticResource SortingConverter}, ConverterParameter='DisplayName.Text'}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate x:Uid="HierarchicalDataTemplate_1" ItemsSource="{Binding Path=Children, Mode=OneWay, Converter={StaticResource SortingConverter}, ConverterParameter='DisplayName.Text'}">
<CheckBox VerticalAlignment="Center" IsChecked="{Binding IsSelected, Mode=TwoWay}">
<TextBlock x:Uid="TextBlock_1" Text="{Binding DisplayName.Text, Mode=OneWay}" />
</CheckBox>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
的 “代码隐藏” TreeView.xaml.cs
public partial class MultipleColumnsSelectorView : UserControl
{
public MultipleColumnsSelectorView()
{
InitializeComponent();
}
private MultipleColumnsSelectorVM Model
{
get { return DataContext as MultipleColumnsSelectorVM; }
}
}
视图模型(试图只包括相关的东西)MultipleColumnsSelectorVM
:
public partial class MultipleColumnsSelectorVM : ViewModel, IMultipleColumnsSelectorVM
{
public ReadOnlyCollection<TreeFieldData> TreeFieldData
{
get { return GetValue(Properties.TreeFieldData); }
set { SetValue(Properties.TreeFieldData, value); }
}
public List<TreeFieldData> SelectedFields
{
get { return GetValue(Properties.SelectedFields); }
set { SetValue(Properties.SelectedFields, value); }
}
private void AddFields()
{
//Logic which loops over SelectedFields and when done calls a delegate which passes
//the result to another class. This works, implementation hidden
}
该模型TreeFieldData
:
public class TreeFieldData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public IEnumerable<TreeFieldData> Children { get; private set; }
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("IsSelected"));
}
}
}
问题:
,我想是当用户检查一个复选框,它应该设置的TreeField
的IsSelected
财产行为(它是现在),但后来我想返回ViewModel并确保将此特定TreeField
添加到SelectedFields
。我真的不明白PropertyChangedEvent.Invoke
会做什么以及谁会收到该事件?我怎样才能确保SelectedFields
得到填充,所以当AddFields()
被调用时,它有所有TreeField
数据实例被检查?
我猜MultipleColumnsSelectorVM类有一个“TreeFieldData”属性,它返回TreeView中看到的TreeFieldData对象的列表? – mm8
@ mm8对不起,现在我已经包括了。 – DSF
@ mm8 FYI:TreeFieldData属性由我没有包含的Initialize方法填充。 – DSF