簡體   English   中英

UWP PivotItem標頭可見性綁定

[英]UWP PivotItem Header visibility binding

我在UWP中進行綁定,列表視圖未顯示(因此工作正常),但標頭仍在視圖中。

因此,問題在於標頭沒有從PivotItem獲取綁定,這可能是什么問題?

<PivotItem Header="Hello" Visibility="{Binding isVisible, Converter={StaticResource Visibility}}">
    <ListView ItemsSource="{Binding myList}"/>
</PivotItem>

這實際上有點棘手。 PivotItem上設置“ Visibility ”確實確實只隱藏了項目的內容,而不是PivotItem本身。 也就是說,您可以通過將其從數據透視圖中完全刪除來將其隱藏在代碼后面:

MyPivot.Items.Remove(HideablePivotItem);

現在的問題是,您需要在綁定更改時觸發它。 為此,我建議您使用自定義的BehaviorCallMethodAction

首先從NuGet安裝Microsoft.Xaml.Behaviors.Uwp.Managed (右鍵單擊您的項目,單擊Manage NuGet Packages... ,使用搜索找到該軟件包,然后單擊Install

現在,創建一個新的類DataChangeTriggerBehavior類:

public class DataChangeTriggerBehavior : Trigger<FrameworkElement>
{
    public static readonly DependencyProperty BindingProperty = DependencyProperty.Register(
        nameof(Binding), typeof(object), typeof(DataChangeTriggerBehavior), new PropertyMetadata(null, BindingChanged));

    public object Binding
    {
        get => (object)GetValue(BindingProperty);
        set => SetValue(BindingProperty, value);
    }

    private static void BindingChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
    {
        DataChangeTriggerBehavior changeTrigger = (DataChangeTriggerBehavior)dependencyObject;

        if (changeTrigger.AssociatedObject == null) return;

        Interaction.ExecuteActions(changeTrigger.AssociatedObject, changeTrigger.Actions, args);
    }
}

此行為將觀察綁定並在綁定更改時觸發其關聯的操作。

現在,如下更新您的Page元素:

<Page 
    ...
    x:Name="Page"
    xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
    xmlns:core="using:Microsoft.Xaml.Interactions.Core"
    xmlns:customBehavior="using:XXX"
    mc:Ignorable="d">

其中XXX是定義您的行為的名稱空間。

現在,在Pivot使用該行為:

<Pivot x:Name="MyPivot">
    <interactivity:Interaction.Behaviors>
        <local:DataChangeTriggerBehavior Binding="{Binding isVisible}">
            <core:CallMethodAction MethodName="TogglePivotItem" 
                                   TargetObject="{Binding ElementName=Page}" />
        </local:DataChangeTriggerBehavior>
    </interactivity:Interaction.Behaviors>
    <PivotItem Header="Hello" Visibility="Collapsed" x:Name="HideablePivotItem">
        <ListView ItemsSource="{Binding myList}"/>
    </PivotItem>
</Pivot>

最后,您必須在頁面的代碼隱藏中定義TogglePivotItem方法:

private int originalPosition = 0;

public void TogglePivotItem()
{
    if (MyPivot.Items.Contains(HideablePivotItem))
    {
        //store the position of the item to be readded later
        originalPosition = MyPivot.Items.IndexOf(HideablePivotItem);
        MyPivot.Items.Remove(HideablePivotItem);
    }
    else
    {
        MyPivot.Items.Insert(originalPosition, HideablePivotItem);
    }            
}

我正在存儲PivotItem的原始位置,以便可以再次將其重新添加到同一位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM