我對如何使用綁定設置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