我已经将一个ObservableCollection绑定到一个DataSrid的ItemSource,但是,我想通过ViewModel检索(通过setter)各个属性。
好吧听起来令人困惑,所以会解释。
在我的ObservableCollection中,我有一个名为“Active”的属性,所以我希望在用户点击或关闭DataGrid中的复选框时设置此元素。
所以XAML
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
我希望在取消选中或选中该框时,在ViewModel中触发此代码
private bool m_Active = false;
public bool Active
{
get { return m_Active; }
set
{
m_Active = value;
OnPropertyChanged("Active");
}
}
但即使启用了双向模式,它也没有。有什么原因吗?
注意:在DataGrid的SelectedItem属性上,我可以获得SelectedRow,所以基本上我想要选择的Individual属性!
由于
答案 0 :(得分:0)
听起来你在数据网格寻找“活跃”的地方感到困惑。属性。由于datagrid绑定到Observable Collection,因此可观察集合中的对象需要具有“活动”功能。它们的属性,而不是用于视图的视图模型。但是,如果您实际上想要将数据网格的所有行绑定到视图模型上的单个属性,则需要查找祖先树以查找控件的数据上下文,然后绑定到&#39; Active&#39;财产:
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
但是,我想,你正在寻找与活跃的&#39;可观察集合中对象的属性。在运行应用程序时检查输出窗口,如果对象上不存在该属性,则应该看到绑定错误。
答案 1 :(得分:0)
尝试使用CellEditingTemplate
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Active, Mode=TwoWay}" HorizontalAlignment="Center"></CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
希望有所帮助
答案 2 :(得分:0)
您是否尝试过设置UpdateSourceTrigger?
<CheckBox IsChecked="{Binding Active, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"></CheckBox>