【发布时间】:2020-06-02 04:24:25
【问题描述】:
我有一个模型,其中包含 CanDrawProperty。我想将此属性绑定到 DataGrid CheckBox 的 IsEnabled 属性:
public class Series : INotifyPropertyChanged
{
private ObservableCollection<DropPhoto> _dropPhotosSeries;
public ObservableCollection<DropPhoto> DropPhotosSeries
{
get
{
return _dropPhotosSeries;
}
set
{
_dropPhotosSeries = value;
OnPropertyChanged(new PropertyChangedEventArgs("DropPhotosSeries"));
}
}
private bool _canDrawPlot;
public bool CanDrawPlot
{
get
{
if (_dropPhotosSeries?.Where(x => x.Drop.RadiusInMeters != null).ToList().Count > 1)
{
_canDrawPlot = true;
return _canDrawPlot;
}
_canDrawPlot = false;
return _canDrawPlot;
}
set
{
_canDrawPlot = value;
OnPropertyChanged(new PropertyChangedEventArgs("CanDrawPlot"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
}
我想根据这个模型的 CanDrawPlot 属性更新我的 Datagrid CheckBox IsEnabled 状态。但这似乎不起作用。用于 DataGrid 的 XAML:
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" SelectionMode="Single" Margin="0" BorderThickness="0" ClipToBounds="True" ItemsSource="{Binding User.UserSeries}" SelectionChanged="SeriesDataGrid_OnSelectionChanged" Name="SeriesDataGrid">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsEnabled="{Binding CanDrawPlot}" Checked="ChooseSeries_Checked" x:Name="ChooseSeries" Height="25"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我有类用户。它包含 UserSeries。 UserSeries 有属性 CanDrawPlot:
public class User : INotifyPropertyChanged
{
private ObservableCollection<Series> _userSeries;
public ObservableCollection<Series> UserSeries
{
get
{
return _userSeries;
}
set
{
_userSeries = value;
OnPropertyChanged(new PropertyChangedEventArgs("UserSeries"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
}
【问题讨论】:
-
User.UserSeries是Series类的集合吗?还有,为什么要在属性getter中设置_canDrawPlot? -
是的。无论如何,这个属性并不意味着要设置。我可以根据条件在 getter 中返回 true 或 false
-
私有 bool _canDrawPlot; public bool CanDrawPlot { get { if (_dropPhotosSeries?.Where(x => x.Drop.RadiusInMeters != null).ToList().Count > 1) { return true; } 否则 { 返回假; } } 设置 { _canDrawPlot = 值; OnPropertyChanged(new PropertyChangedEventArgs("CanDrawPlot")); } }`