【问题标题】:Binding not updating property of a collection绑定不更新集合的属性
【发布时间】:2018-04-05 07:49:19
【问题描述】:

我有一个绑定到 ObservableCollection<MyModel> 的 DataGrid MyModel 有一个绑定到视图上的复选框的布尔属性 IsSelected。但是单击复选框不会更新 MyModel.IsSelected 值。我知道我的绑定是正确的,因为如果我从 viewModel 将 true 分配给 IsSelected,我可以看到复选框被选中。但是当我点击复选框时它不会改变 IsSelected 的值。

这是我的观点:

<DataGrid ItemsSource="{Binding HomeTeamAthletes}"
              MinHeight="200" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="30">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Binding="{Binding IsSelected, Mode=TwoWay}" />
        </DataGrid.Columns>
</DataGrid>

这是我的 ViewModel:

public class MyViewModel : ViewModelBase
{
    public ObservableCollection<MyModel> HomeTeamAthletes =>
        new ObservableCollection<MyModel>
        {
            new MyModel(),
            new MyModel(),
            new MyModel(),
            new MyModel(),
            new MyModel(),
        };

    public class MyModel : ObservableObject
    {
        private bool _isSelected;

        public bool IsSelected
        {
            get => _isSelected;
            set { Set(ref _isSelected, value); }
        }

        public MyModel()
        {
            IsSelected = true;
        }
    }
}

【问题讨论】:

  • 使用Binding IsSelected, UpdateSourceTrigger=PropertyChanged会有帮助吗?
  • @ASh 你知道为什么这是必要的吗?如果你使用和他在 ItemTemplate 中做的一样的事情,updatesourcetrigger 是 LostFocus,但如果你在 DataGridTemplateColumn 的 CellTemplate 中使用它,显然它会突然变为 Explicit。
  • @ASh 是的,确实如此。您需要这样做很愚蠢:/随时将其发布为答案

标签: c# wpf


【解决方案1】:

似乎 CheckBox.IsChecked 绑定不会立即将值传播到绑定源。要更改该设置UpdateSourceTrigger=PropertyChanged

<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

【讨论】:

  • Mode=TwoWay 真的需要吗?
  • 我不这么认为,它只是重复默认设置
  • @Clemens 这不是必需的。这是我最后一次尝试解决这个问题。没想到UpdateSourceTrigger
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多