c# - 将 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>
解决方案
DataGridTemplateColumn.CellTemplate
在每个项目内查找绑定路径。因此,如果您的 Windows 具有该属性,则您根本无法像Binding="{Binding IsExist}"
. 这只会从 的DataContext
中查看每个项目ItemsSource
的DataGrid
。
您需要告诉 XAML 在Window
不是单元格中查找路径:
Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsExist}"
这样,它会在层次结构中上升,直到到达类型为的第一个元素并在Window
那里查找给定的路径。
推荐阅读
- ruby-on-rails - 安装 ruby_postal (1.0.0) 时出错,Bundler 无法继续
- python - 从具有不同 y 轴的 pandas 数据框中绘制条形图和线条
- excel - 代码结束时如何防止SAP打开导出的文件?
- excel - 在模板上设置图表标题
- r - mapdeck 中的 add_polygon 缩小地图
- shell - 为什么 SED 命令适用于服务器但不适用于远程服务器?
- c# - 在 WCF Rest Web 服务中清除 OutputCache?
- c# - 当dockstyle设置为填充时,如何调整TextBox高度?
- python - python中的循环置换运算符
- ruby - 如何根据包含快照 id 的数组标记快照