Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UI元素不会根据绑定到该值的DataTrigger进行更新_C#_Wpf_Xaml - Fatal编程技术网

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)));
        }
    }