C# UI元素不会根据绑定到该值的DataTrigger进行更新
我有一个模型C# UI元素不会根据绑定到该值的DataTrigger进行更新,c#,wpf,xaml,C#,Wpf,Xaml,我有一个模型 public class Measurement : INotifyPropertyChanged { private bool _processed; public bool Processed { get { if ( .... ) return true; return false; } set {
public class Measurement : INotifyPropertyChanged
{
private bool _processed;
public bool Processed
{
get
{
if ( .... ) return true;
return false;
}
set
{
_processed = value;
OnPropertyChanged(new PropertyChangedEventArgs("Processed"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
}
XAML:
我有两个问题:
我已经尝试为case when Processed is false添加第二个数据触发器,但这似乎没有帮助。按照您的指示计算属性值并提供setter不适合。属性的期望是,无论何时设置值,getter都将返回设置的值,如果在getter中计算值,则情况并非如此 因此,
Processed
getter应该始终返回_Processed的值。
或者您应该删除setter并添加一个OnPropertyChanged(新的PropertyChangedEventArgs(“已处理”)代码>无论在何处更改任何影响计算值的内容
例如
Q1:在数据模板中设置数据类型属性。它应该是什么数据类型?项目的类型。
<DataGrid
ItemsSource="{Binding CurrentSeries.MeasurementsSeries,
ElementName=AppMainWindow,Mode=TwoWay,NotifyOnSourceUpdated=True,
UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="45" Header="Status">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock x:Name="PhotosStatusToolTip"
ToolTip="Радиусы всех капель должны быть расчитаны, чтобы построить график."
Height="25" Width="25" />
<ContentControl x:Name="PhotosStatus"
ToolTip="Радиусы всех капель должны быть расчитаны, чтобы построить график."
Content="{StaticResource Warning}"
Height="25" Width="25"
HorizontalAlignment="Center" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Processed}" Value="true">
<Setter Property="Content"
Value="{StaticResource Ok}"
TargetName="PhotosStatus" />
<Setter Property="ToolTip"
Value="Радиус капли расчитан успешно."
TargetName="PhotosStatusToolTip" />
<Setter Property="ToolTip"
Value="Радиус капли расчитан успешно."
TargetName="PhotosStatus" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
public bool Processed
{
get
{
if (X > 0 && Y > 0) return true;
return false;
}
}
public int X
{
get { return _x; }
set
{
_x = value;
OnPropertyChanged(new PropertyChangedEventArgs(namepf(X)));
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Processed)));
}
}
public int Y
{
get { return _y; }
set
{
_y = value;
OnPropertyChanged(new PropertyChangedEventArgs(namepf(Y)));
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Processed)));
}
}