gpt4 book ai didi

c# - 如何将 DataGridTemplateColumn 的可见性绑定(bind)到 textBlock 的可见性

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:44 25 4
gpt4 key购买 nike

假设我有两个复选框,即 chkBox1 和 chkBox2。

现在我有一个名为 txtBlock 的文本 block ,它的可见性取决于 chkBox1 和 chkBox2 的 IsChecked 属性。即如果 chkBox1.IsChecked = true 和 chkBox2.IsChecked = true 那么只有 txtBlock 应该是可见的。

现在我有一个包含 2 列的 DataGrid。即 colID 和 colName。两个列都是 DataGridTemplateColumns。我想让 colName 仅在 txtBlock.Visibility = Visible 时可见。

这是 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 中的这种绑定(bind)将不起作用,因为 DataGrid 列不是可视化树的一部分。因此,我创建了一个名为 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>

然后我尝试按如下方式绑定(bind) DataGridTemplateColumn:

<DataGridTemplateColumn Header="Name" Visibility="{Binding Source={StaticResource proxy}}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

但是还是绑定(bind)不成功。

谁能提出一个好的解决方案?

最佳答案

Data BindingProxy 的依赖属性持有 textBlock Visibility,因此您需要与其绑定(bind)。

改变

Visibility="{Binding Source={StaticResource proxy}}"

Visibility="{Binding Data, Source={StaticResource proxy}}"

并且您的列可见性将正常工作。

关于c# - 如何将 DataGridTemplateColumn 的可见性绑定(bind)到 textBlock 的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22800893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com