WPF绑定DataGridCheckBoxColumn没有更新

本文关键字:更新 DataGridCheckBoxColumn 绑定 WPF | 更新日期: 2023-09-27 18:10:27

我正试图找出如何正确处理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对象,并可以从那里确定行数据,我想编辑该数据。但是我的印象是绑定数据应该可以处理这个问题。

WPF绑定DataGridCheckBoxColumn没有更新

您的代码没有任何问题。只是值没有立即更新,只有在ComboBox失去焦点后才会更新。

您可以通过在绑定上设置UpdateSourceTrigger=PropertyChanged来改变它。

<DataGridCheckBoxColumn Header="Publish" Binding="{Binding Path=Publish, UpdateSourceTrigger=PropertyChanged}">

我不喜欢在后台工作,而是在ViewModel中管理它。我现在没有执行您的代码,但首先,我将配置CheckBoxColumn的绑定,如

Binding="{Binding Path=Publish, Mode=TwoWay}"

在Publish属性的setter中,您可以编写业务逻辑。如果它非常耗时(访问网络经常是),我也建议异步执行。

如果你需要,我可以提供一个简单的例子。但在其他线程中应该已经有很多了。