使用WPF/MVVM从网格中的复选框获取更改事件?
我有一个数据集,它本质上是一个对象列表,其中包含一个绑定到DataGrid(特定于DXGrid)的布尔属性。我试图通过单击复选框来填充IsChecked属性。对于独立的文本框,我会使用绑定的UpdateSourceTrigger选项,但至少在DXGrid中,这似乎不可用。实际上,我必须失去复选框的焦点才能更新属性 有什么想法吗 假设下面的RaisePropertyChanged函数是INotifyPropertyChanged的实现 数据对象使用WPF/MVVM从网格中的复选框获取更改事件?,wpf,mvvm,checkbox,Wpf,Mvvm,Checkbox,我有一个数据集,它本质上是一个对象列表,其中包含一个绑定到DataGrid(特定于DXGrid)的布尔属性。我试图通过单击复选框来填充IsChecked属性。对于独立的文本框,我会使用绑定的UpdateSourceTrigger选项,但至少在DXGrid中,这似乎不可用。实际上,我必须失去复选框的焦点才能更新属性 有什么想法吗 假设下面的RaisePropertyChanged函数是INotifyPropertyChanged的实现 数据对象 public class MyObject {
public class MyObject
{
bool _isChecked;
string _name;
int _id;
public MyObject(OtherObject oo)
{
_name = oo.Name;
_id = oo.ID;
}
public int ID
{ get { return _id; }}
public string Name
{ get { return _name; }}
public bool IsChecked
{
get { return _isChecked; }
set
{
if (value == _isChecked)
return;
_isChecked = value;
RaisePropertyChanged("IsChecked");
}
}
}
视图模型
class MyTestViewModel : BaseViewModel
{
#region Fields
#endregion
public MyTestViewModel(Message message)
: base(message)
{
AvailableObjects = PopulateDataSet();
}
#region Properties
public List<MyObject> AvailableObjects { get; set; }
}
类MyTestViewModel:BaseViewModel
{
#区域字段
#端区
公共MyTestViewModel(消息)
:base(消息)
{
AvailableObjects=PopulateDataSet();
}
#区域属性
公共列表可用对象{get;set;}
}
查看XAML
<dxg:GridControl x:Name="SearchGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxHeight="1024" AutoPopulateColumns="True" DataSource="{Binding Path=AvailableObjects}" >
<dxg:GridControl.Columns>
<dxg:GridColumn Header="Select" Width="60" FixedWidth="True" FieldName="IsChecked" ImmediateUpdateColumnFilter="True"></dxg:GridColumn>
<dxg:GridColumn Header="ID Number" Width="130" FixedWidth="True" ReadOnly="True" FieldName="ID"></dxg:GridColumn>
<dxg:GridColumn Header="Name" FieldName="Name" ReadOnly="True"></dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView AllowEditing="True" x:Name="view" IndicatorWidth="0" AutoWidth="True"/>
</dxg:GridControl.View>
</dxg:GridControl>
它是一个特殊的复选框(如DXCheckbox或其他)还是一个普通的WPF复选框。对于后者,绑定将是IsChecked={binding Path=IsChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}
您的输出窗口中有任何绑定错误吗?尝试一下:
<dxg:GridColumn>
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxe:CheckEdit Checked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
如果您将WPF的内置DataGrid与DataGridCheckBoxColumn一起使用,则可以使用Mode=TwoWay将该列绑定到IsChecked属性。。。但我恐怕无法告诉您如何使用DXGrid进行此操作。我可以在网格中添加一个未绑定的复选框(我以前确实尝试过,但结果参差不齐)。假设我这样做,绑定路径是什么?{Binding Path=IsChecked,Mode=TwoWay}似乎不起作用。