首页 > 解决方案 > 将 Window 的属性绑定到 DataGridCell 的 DataTrigger

问题描述

我有一个布尔属性,我想将它绑定到 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>

标签: c#wpftriggersbinding

解决方案


DataGridTemplateColumn.CellTemplate在每个项目内查找绑定路径。因此,如果您的 Windows 具有该属性,则您根本无法像Binding="{Binding IsExist}". 这只会从 的DataContext中查看每个项目ItemsSourceDataGrid

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

Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsExist}"

这样,它会在层次结构中上升,直到到达类型为的第一个元素并在Window那里查找给定的路径。


推荐阅读