WPF checkboxcolumn-关于复选框值已更改,执行某些操作

时间:2017-12-04 12:57:14

标签: c# wpf

我想要做的是在选中DataGridCheckBoxColumn中的复选框时启用按钮。我做了一些研究,发现下面的stackoverflow。我发现在列上放置UpdateSourceTrigger = PropertyChanged应该可以解决问题,但是当我在我的属性上放置一个断点时,它就不会被调用。

Checkbox event that fires AFTER the value has changed

这是我的XAML代码:

<DataGrid Grid.Row="3" Grid.Column="1" AutoGenerateColumns="False" FontSize="18" ItemsSource="{Binding Path=MyProperty, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}" Header="Verify" Width="1*"/>
        <DataGridTextColumn Binding="{Binding Path=Id, UpdateSourceTrigger=PropertyChanged}" Header="PalletID" IsReadOnly="True" Width="2*"/>
    </DataGrid.Columns>
</DataGrid>

在我的视图模型中,我的属性是:

private ObservableCollection<Objects.MyClass> _myProperty;
public ObservableCollection<Objects.MyClass> MyProperty
{
    get { return _myProperty; }
    set
    {
        _myProperty= value;
        this.RaisePropertyChanged();
    }
}

其中MyClass是一个包含三个属性的简单类:

public string Id { get; set; }
public bool Verified { get; set; }
public bool Status { get; set; }


public MyClass(string id, bool currentStatus)
{
    Id = id;
    Verified = currentStatus;
    Status = false;//Set to false initially to deselect checkbox.
} 

我有什么遗失的东西吗?根据我在线收集的内容,复选框列上的UpdateSourceTrigger = PropertyChanged是允许我在复选框值更改时查看的内容。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

您的代码是合作伙伴。只需添加按钮并将Status属性绑定到按钮的IsEnabled属性。

<DataGrid Grid.Row="3" Grid.Column="1" AutoGenerateColumns="False" FontSize="18" ItemsSource="{Binding Path=MyProperty, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Binding="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}" Header="Verify" Width="1*"/>
                <DataGridTextColumn Binding="{Binding Path=Id, UpdateSourceTrigger=PropertyChanged}" Header="PalletID" IsReadOnly="True" Width="2*"/>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button IsEnabled="{Binding Status}">I am a button</Button>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>