我有一个主窗口,其中包含带有切换按钮的
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));
}
}
添加
UpdateSourceTrigger=PropertyChanged
解决了问题