双向集合绑定
Two-Way Collection binding
我有一个 table 带有绑定到 ObservableCollection > 集合的复选框,我想在其中一个复选框更改我的视图时跟踪对此集合的更改。
这是我的代码:
<UserControl.Resources>
<DataTemplate x:Key="DataTemplate_Level2">
<CheckBox IsChecked="{Binding Path=. ,Mode=TwoWay}" Height="40" Width="50" Margin="4,4,4,4"/>
</DataTemplate>
<DataTemplate x:Key="DataTemplate_Level1">
<ItemsControl x:Name="2st" Items="{Binding Path=. ,Mode=TwoWay}" ItemTemplate="{DynamicResource DataTemplate_Level2}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
</UserControl.Resources>
<ItemsControl Grid.Column="1" Items="{Binding MyCollection, Mode=TwoWay}" x:Name="lst" ItemTemplate="{DynamicResource DataTemplate_Level1}" Background="Gold"/>
我的视图模型属性
public ObservableCollection<ObservableCollection<bool>> MyCollection
{
get
{
return someCollection;
}
set
{
someCollection = value;
RaisePropertyChanged(nameof(MyCollection));
}
}
view of table
如何将集合数据更改传递给视图模型?
您需要声明一个新的 class,它将成为 属性 类型 book 和适当的 RaisePropertyChanged 调用的复选框的视图模型。并且 MyCollection 必须是 class 而不是 bool
的实例集合的集合
public class CheckboxViewModel
{
private bool _checkboxValue;
public bool CheckboxValue
{
get
{
return _checkboxValue;
}
set
{
_checkboxValue = value;
RaisePropertyChanged(nameof(CheckboxValue));
}
}
}
确保你在复选框视图中有双向绑定 属性
顺便说一句 - MyCollection 的 setter 处的 RaisePropertyChanged 在您的示例中引发了错误 属性 名称的事件。
我有一个 table 带有绑定到 ObservableCollection > 集合的复选框,我想在其中一个复选框更改我的视图时跟踪对此集合的更改。
这是我的代码:
<UserControl.Resources>
<DataTemplate x:Key="DataTemplate_Level2">
<CheckBox IsChecked="{Binding Path=. ,Mode=TwoWay}" Height="40" Width="50" Margin="4,4,4,4"/>
</DataTemplate>
<DataTemplate x:Key="DataTemplate_Level1">
<ItemsControl x:Name="2st" Items="{Binding Path=. ,Mode=TwoWay}" ItemTemplate="{DynamicResource DataTemplate_Level2}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
</UserControl.Resources>
<ItemsControl Grid.Column="1" Items="{Binding MyCollection, Mode=TwoWay}" x:Name="lst" ItemTemplate="{DynamicResource DataTemplate_Level1}" Background="Gold"/>
我的视图模型属性
public ObservableCollection<ObservableCollection<bool>> MyCollection
{
get
{
return someCollection;
}
set
{
someCollection = value;
RaisePropertyChanged(nameof(MyCollection));
}
}
view of table
如何将集合数据更改传递给视图模型?
您需要声明一个新的 class,它将成为 属性 类型 book 和适当的 RaisePropertyChanged 调用的复选框的视图模型。并且 MyCollection 必须是 class 而不是 bool
的实例集合的集合public class CheckboxViewModel
{
private bool _checkboxValue;
public bool CheckboxValue
{
get
{
return _checkboxValue;
}
set
{
_checkboxValue = value;
RaisePropertyChanged(nameof(CheckboxValue));
}
}
}
确保你在复选框视图中有双向绑定 属性
顺便说一句 - MyCollection 的 setter 处的 RaisePropertyChanged 在您的示例中引发了错误 属性 名称的事件。