绑定不更新集合的属性

时间:2018-04-05 07:49:20

标签: c# wpf

我有一个绑定到ObservableCollection<MyModel> MyModel的DataGrid有一个布尔属性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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

似乎CheckBox.IsChecked绑定并没有立即将值传播到绑定源。要更改该集UpdateSourceTrigger=PropertyChanged

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