我有一个布尔属性,我想将其绑定到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>
答案 0 :(得分:1)
DataGridTemplateColumn.CellTemplate
在每个项目内部查找绑定路径。因此,如果Windows具有该属性,则无法像Binding="{Binding IsExist}"
那样访问它。这只会查看DataContext
的{{1}}中的每个项目的ItemsSource
。
您需要告诉XAML在DataGrid
而不是单元格中查找路径:
Window
这样,它会在层次结构中向上移动,直到到达类型为Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsExist}"
的第一个元素,然后在其中查找给定的路径。