【发布时间】: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 是的,确实如此。您需要这样做很愚蠢:/随时将其发布为答案