DataGridCheckBoxColumn的WPF绑定未更新

时间:2015-08-31 12:10:58

标签: c# wpf

我想弄清楚如何正确处理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对象,可以从那里确定行数据,我想编辑那些数据。但我认为绑定数据应该处理这个问题。

2 个答案:

答案 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中,您可以编写业务逻辑。如果它非常耗时(经常访问网络),我也建议不要这样做。

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