绑定到对象 ObservableCollection 中对象的属性

问题描述 投票:0回答:1

我有一个主窗口,其中包含带有切换按钮的

DataGrid
DataGrid
的项目源是对象的
ObservableCollection
。我想遵循:当用户检查切换时,
IsActive2
将表示它是
set
。但现在它没有发生,我不明白为什么。

这里

MainWindow
xaml:

<Grid>
    <DataGrid ItemsSource="{Binding MyList}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <!-- Define a DataGridTemplateColumn -->
            <DataGridTemplateColumn Header="Toggle Column">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <!-- Use a ToggleButton in the cell template -->
                        <ToggleButton IsChecked="{Binding IsActive2, Mode=TwoWay}" Content="Toggle" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

这里的代码:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private ObservableCollection<TestObj> _myList;
    public ObservableCollection<TestObj> MyList
    {
        get { return _myList; }
        set
        {
            _myList = value;
            OnPropertyChanged(nameof(MyList));
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        MyList = new ObservableCollection<TestObj> { new TestObj(), new TestObj(), new TestObj() };
        DataContext = this;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

这里

TestObj

 public class TestObj : INotifyPropertyChanged
 {
     private bool _isActive;

     public bool IsActive2
     {
         get { return _isActive; }
         set
         {
             _isActive = value;
             OnPropertyChanged(nameof(IsActive2)); 
         }
     }

     public event PropertyChangedEventHandler PropertyChanged;
     protected virtual void OnPropertyChanged(string propertyName)
     {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     }
 }
c# wpf mvvm
1个回答
0
投票

添加

UpdateSourceTrigger=PropertyChanged
解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.