假设我有两个checkBox,即chkBox1和chkBox2。
现在我有一个名为txtBlock的textBlock,其可见性取决于chkBox1的isChecked属性以及chkBox2。即如果chkBox1.IsChecked = true且chkBox2.IsChecked = true那么只有txtBlock应该是可见的。
现在我用一个名为2列的DataGrid。即colID和colName。这两列都是DataGridTemplateColumns。我想只在txtBlock.Visibility = Visible时使colName可见。
这是XAML:
<Window........>
<CheckBox x:Name="chkBox1" />
<CheckBox x:Name="chkBox2" />
<TextBlock x:Name="txtBlock">
<MultiBinding Converter="{StaticResource twiceBoolToVisibilityConverter}">
<Binding ElementName="chkBox1" Path="IsChecked" />
<Binding ElementName="chkBox2" Path="IsChecked" />
</MultiBinding>
</TextBlock>
<DataGrid>
<DataGridTemplateColumn Header="ID">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" Visibility="{Binding Path=Visibility, ElementName=txtBlock}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
</Window>
但DataGridTemplateColumn中的此绑定将不起作用,因为DataGrid Column不是Visual Tree的一部分。所以,我按如下方式创建了一个Class Called BindingProxy:
public class BindingProxy : Freezable
{
#region Overrides of Freezable
protected override Freezable CreateInstanceCore()
{
return new BindingProxy();
}
#endregion
public object Data
{
get { return GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}
然后将StaticResource声明为:
<DataGrid.Resources>
<helpers:BindingProxy x:Key="proxy" Data="{Binding Visibility, ElementName=txtBlock}" />
</DataGrid.Resources>
然后我尝试按如下方式绑定DataGridTemplateColumn:
<DataGridTemplateColumn Header="Name" Visibility="{Binding Source={StaticResource proxy}}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是绑定仍然没有成功。
有人可以提出一个好的解决方案吗?
答案 0 :(得分:2)
Data
BindingProxy
的依赖项属性包含textBlock可见性,因此您需要与其绑定。
更改
Visibility="{Binding Source={StaticResource proxy}}"
到
Visibility="{Binding Data, Source={StaticResource proxy}}"
您的列可见性将正常工作。