将Window的属性绑定到DataGridCell的DataTrigger

时间:2019-07-12 17:40:09

标签: c# wpf triggers binding

我有一个布尔属性,我想将其绑定到datatrigger  但是我的代码不起作用

我尝试过:

public event PropertyChangedEventHandler PropertyChanged;
private bool _IsExist;

public bool IsExist
{
    get
    {
        return _IsExist;
    }
    set
    {
        _IsExist = value;
        NotifyPropertyChanged("IsExist");
    }
}


private void NotifyPropertyChanged(string prop)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}

这样,我可以将项目添加到datagrid并检查mypath是否存在,因此我需要基于mypath存在或不存在更改属性

foreach (var i in parsedValues)
{
    if (Directory.Exists(MyPath)
    {
        IsExist = true;
    }
    else
    {
        IsExist = false;
    }
    datagrid.Items.Add(i);
}

这是我的xaml

<DataGridTemplateColumn Header="دانلود">
  <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
          <Button Click="Button_Click">
              <Button.Style>
                  <Style TargetType="Button">
                      <Setter Property="Content" Value="دانلود"/>
                      <Style.Triggers>
                          <DataTrigger Binding="{Binding IsExist}" Value="True">
                              <Setter Property="Content" Value="مشاهده"/>
                          </DataTrigger>
                      </Style.Triggers>
                  </Style>
              </Button.Style>
          </Button>
      </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:1)

DataGridTemplateColumn.CellTemplate在每个项目内部查找绑定路径。因此,如果Windows具有该属性,则无法像Binding="{Binding IsExist}"那样访问它。这只会查看DataContext的{​​{1}}中的每个项目ItemsSource

您需要告诉XAML在DataGrid而不是单元格中查找路径:

Window

这样,它会在层次结构中向上移动,直到到达类型为Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsExist}" 的第一个元素,然后在其中查找给定的路径。