在值更改后触发的复选框事件

时间:2013-08-02 09:31:04

标签: c# wpf events checkbox observablecollection

我正在创建我的第一个wpf应用程序。此时我需要一个事件,在复选框的值发生变化后触发,因此选中和取消选中的事件不在图片中: - (

我有一个数据网格,绑定到一个可观察的集合。在这个数据网格中,我有一个带复选框的列(绑定到observ.col。中的属性)。 表单上的文本框显示“总值”,即所有已检查项的值的总和。因此,当选中/取消选中复选框时,我需要重新计算总值。为此,我循环了observ的项目。山坳。但是,当我附加事件'已检查'和'未选中'时。首先计算总值。然后更改检查值。

有没有办法让检查值发生变化,之后会发生一次事件?

THX,

<DataGrid AutoGenerateColumns="False" Height="305" Margin="105,137,0,0" Name="GrdReceivings" VerticalAlignment="Top" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" ItemsSource="{Binding}" HorizontalAlignment="Left" Width="850" SelectionMode="Single" CanUserAddRows="False" CanUserDeleteRows="False" SelectedCellsChanged="GrdReceivings_SelectedCellsChanged" MouseDoubleClick="GrdReceivings_MouseDoubleClick" IsEnabled="True">
    <DataGrid.Columns>
            <DataGridCheckBoxColumn MinWidth="40" Binding="{Binding Path=Selected}" >
                <DataGridCheckBoxColumn.CellStyle>
                    <Style>
                        <EventSetter Event="CheckBox.Checked" Handler="OnCheck"/>
                        <EventSetter Event="CheckBox.Unchecked" Handler="OnUncheck"/>
                    </Style>
                </DataGridCheckBoxColumn.CellStyle>
            </DataGridCheckBoxColumn>
...

3 个答案:

答案 0 :(得分:0)

对于WPF,你这样做是错误的。而不是查看UI控件,查看数据。你说你将Checkbox控件绑定到ObservableCollection的属性......我猜你的意思是对象里面的属性 {{1而不是集合本身。

因此,在您的视图模型或代码中,更改绑定到ObservableCollection控件的属性时的总值。这样,每次都会有更新的值。

答案 1 :(得分:0)

您必须设置UpdateSourceTrigger=PropertyChanged才能立即更新绑定:

<DataGridCheckBoxColumn 
    Binding="{Binding Path=Selected, UpdateSourceTrigger=PropertyChanged}"/>

答案 2 :(得分:0)

谢谢Sheridan&amp;克莱门斯,它做到了伎俩。制定好的答案:

<DataGrid AutoGenerateColumns="False" Height="305" Margin="105,137,0,0" Name="GrdReceivings" VerticalAlignment="Top" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" ItemsSource="{Binding}" HorizontalAlignment="Left" Width="850" SelectionMode="Single" CanUserAddRows="False" CanUserDeleteRows="False" SelectedCellsChanged="GrdReceivings_SelectedCellsChanged" MouseDoubleClick="GrdReceivings_MouseDoubleClick" IsEnabled="True">
    <DataGrid.Columns>
            <DataGridCheckBoxColumn MinWidth="40" Binding="{Binding Path=Selected, UpdateSourceTrigger=PropertyChanged}" />

然后,在可观察集合中,在setter上计算值。

解决!!!