我需要的绑定Visibility
一个的DataGridTemplateColumn
到外的财产DataGrid.ItemsSource
,因为我需要在所有行此列绑定到一个属性里面ViewModel
,但据我所知,你才可以绑定,为东西里面ItemsSource
或者你应该使用ElementStyle
和EditingElementStyle
我已经尝试过这样的代码:
<DataGridTemplateColumn Header="post"
Visibility="{Binding DataContext.ProjectPostVisibility
, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>
我敢肯定,我的结合是正确的,因为它在我的绑定工作正常DataGridCell.Visibility
象下面这样:
<DataGridTemplateColumn Header="post">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Visibility" Value="{Binding DataContext.ProjectPostVisibility,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn >
您结合是正确的,但它会与不工作DataGridTemplateColumn
直接,因为它不是在视觉树。 所以它不是inherting DataContext
。
您需要将绑定DataGridTemplateColumn
从后面的代码。 这里是一个演示 ,显示做这件事的方式。
在DataGridTemplateColumn.CellStyle和完成添加此setter:
<Setter Property="Visibility" Value="{Binding DataContext.isVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>
如果您需要更多的帮助,看我下面的例子。 我想删除按钮不能在项目级别可见。 首先,你必须确保你在你的视图模型有一个IsVisible属性:
private System.Windows.Visibility _isVisible;
public System.Windows.Visibility isVisible
{
get { return _isVisible; }
set
{
if (_isVisible != value)
{
_isVisible = value;
OnPropertyChanged("isVisible");
}
}
}
然后:
if (isProj == false)
this.model.isVisible = Visibility.Visible;
else
this.model.isVisible = Visibility.Collapsed;
XAML:
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate >
<DataTemplate >
<Button x:Name="btnRemove" Content="X">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="FontWeight" Value="ExtraBold" />
<Setter Property="FontSize" Value="50" />
</Style>
</Button.Style>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Red"/>
<Setter Property="Visibility" Value="{Binding DataContext.isVisible, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
文章来源: How to bind DataGridTemplateColumn.Visibility to a property outside of DataGrid.ItemsSource?