【问题标题】:WPF checkboxcolumn— on checkbox value changed, do somethingWPF checkboxcolumn——在复选框值改变时,做一些事情
【发布时间】:2017-12-04 12:57:13
【问题描述】:

我想要做的是在选中 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 应该允许我查看复选框值何时更改。任何帮助都会很棒。

【问题讨论】:

  • 所以只是为了验证:您的属性 Status 从未被命中?
  • 你怎么知道这个属性没有被调用?
  • 如果我在课堂上的“状态”上放置一个断点,它会被返回;并且属性在视图中更新。但是,问题是视图看不到更新的值。我知道这不会发生,因为我在我的财产上放置了一个断点。

标签: c# wpf


【解决方案1】:

您的代码是工作伙伴。只需添加按钮并将 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>

【讨论】:

  • 感谢您的反馈。我绑定的按钮在数据网格之外,但您提供的内容在我的应用程序中有效。
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2015-01-23
  • 2016-04-02
相关资源
最近更新 更多