DataGridTextColumn XAML中進行綁定Visibility

首先DataGridTextColumn或其他任何受支持的dataGrid列都不位於的可視樹中DataGrid。因此,在默認情況下它不會繼承DataContextDataGrid。但是,它Binding僅適用於DP,而不適用於DataGridColumn上的其他DP。

因爲它們並不位於同一VisualTree中,所以使用DataContext進行的任何嘗試RelativeSource都將無法正常工作,因爲DataGrid無法遍歷DataGrid。

但是有兩種方法可以實現:


首先使用Freezable類-Freezable即使對象不在視覺或邏輯樹中,它們也可以繼承DataContext。因此,我們可以利用它來進行使用。

首先創建從FreezableDataDP繼承的類,我們可以使用它們在XAML中進行綁定:

public class BindingProxy : Freezable
{
    #region Overrides of Freezable

    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }

    #endregion

    public object Data
    {
        get { return (object)GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }

    public static readonly DependencyProperty DataProperty =
        DependencyProperty.Register("Data", typeof(object),
                                     typeof(BindingProxy));
}

現在,在DataGrid資源中添加它的一個實例,以便它可以繼承DataGrid的DataContext,然後可以與其數據DP綁定:

    <DataGrid>
        <DataGrid.Resources>
            <local:BindingProxy x:Key="proxy" Data="{Binding}"/>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Visibility="{Binding Data.MyColumnVisibility,
                                                Source={StaticResource proxy}}"/>
        </DataGrid.Columns>
    </DataGrid>

其次,您可以使用ElementName或引用XAML中的任何UI元素x:Reference。但是ElementName只能在同一視覺樹中使用,而x:Reference沒有這種約束。

因此,我們也可以利用該優勢。FrameworkElement在“可見性”設置爲“摺疊”的XAML中創建虛擬對象。FrameworkElement將從其父容器(可以是Window或UserControl)繼承DataContext。

並可以在DataGrid中使用它:

    <FrameworkElement x:Name="dummyElement" Visibility="Collapsed"/>
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Header="Test"
                                Binding="{Binding Name}"
                                Visibility="{Binding DataContext.IsEnable,
                                          Source={x:Reference dummyElement}}"/>
        </DataGrid.Columns>
    </DataGrid>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章