我想弄清楚如何正确处理DataGridCheckBoxColumn
。我有一个数据列表,其中包括发布'选项。选中时,对象将被标记为发布到其他服务器。
到目前为止,我所拥有的是:
<DataGrid x:Name="grdEducationalPopups"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="19,155,0,0"
AlternationCount="2"
AutoGenerateColumns="False"
ItemsSource="{Binding PopupCollection}"
Loaded="grdEducationalPopups_Loaded"
MinRowHeight="26"
RowDetailsTemplate="{StaticResource RowDetailTemplate}" RowDetailsVisibilityChanged="grdEducationalPopups_RowDetailsVisibilityChanged" SelectionChanged="grdEducationalPopups_SelectionChanged" Grid.ColumnSpan="2">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<ToggleButton x:Name="RowHeaderToggleButton" Click="ToggleButton_Click" Cursor="Hand"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Width="150" Binding="{Binding DisplayName}" Header="Form Name" IsReadOnly="True"/>
<DataGridTextColumn Width="280" Binding="{Binding URLLocation}" Header="Page Address"/>
<DataGridTextColumn Width="125" Binding="{Binding DateLastTouched}" Header="Date Modified" IsReadOnly="True"/>
<DataGridTextColumn Width="125" Binding="{Binding DateRowAdded}" Header="Date Added" IsReadOnly="True"/>
<DataGridCheckBoxColumn Header="Publish" Binding="{Binding Path=Publish}">
<DataGridCheckBoxColumn.CellStyle>
<Style>
<EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</DataGrid>
我确实有OnClick代码,但它现在没有做任何事情,只是允许我检查值。我的发布列表中的值不会更改。当应该为真时,给定记录的发布值仍为false
。
如果我将默认值从false更改为true并启动我的应用程序,则会检查所有复选框,这是我所期望的。这告诉我,我的绑定是正确的。
如何正确管理用户更改,以便我可以对更改采取相应措施?在我的代码后面我得到一个DataGridCell对象,可以从那里确定行数据,我想编辑那些数据。但我认为绑定数据应该处理这个问题。
答案 0 :(得分:7)
您的代码没有任何问题。只有在ComboBox
失去焦点后,才会立即更新该值。
您可以通过在绑定上设置UpdateSourceTrigger=PropertyChanged
来更改它。
<DataGridCheckBoxColumn Header="Publish" Binding="{Binding Path=Publish, UpdateSourceTrigger=PropertyChanged}">
答案 1 :(得分:0)
我不想使用bode,但在ViewModel中管理它。我现在没有执行你的代码,但首先,我会配置CheckBoxColumn的绑定,如
Binding="{Binding Path=Publish, Mode=TwoWay}"
在Publish属性的setter中,您可以编写业务逻辑。如果它非常耗时(经常访问网络),我也建议不要这样做。
如果你愿意,我可以提供一个简单的例子。但其他线程中应该已经有很多了。