如何在FlipView中获取当前视图?

时间:2012-10-04 00:26:50

标签: xaml data-binding windows-runtime datatemplate winrt-xaml

我有一个FlipView,其中包含DataTemplate中的一些控件。由于它在FlipView中,它将生成这些控件的多个副本。如果我想找到当前FlipView视图中的控件(即屏幕/可见),我该怎么办?

我可以检查控件内部的加载事件,但会多次调用,我不知道哪一个被显示。

1 个答案:

答案 0 :(得分:1)

创建一个可以从ViewModel绑定到RichTextBlock的附加依赖项属性,例如:

public static class MyStaticClass
{
    public static readonly DependencyProperty IsVisible = DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(MyStaticClass), new PropertyMetadata(false, OnVisibilityChanged));

    private static void OnVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var rtb = (RichTextBlock)d;
        var isVisible = (bool)e.NewValue;

        // Do something to rtb.Inlines  
    }
}

使用此属性,您可以将其绑定到ViewModel的IsSelected属性:

<FlipView ItemsSource="{Binding SomeList}" SelectedItem="{Binding SelectedVM, Mode=TwoWay}">
    <FlipView.ItemTemplate>
        <DataTemplate>
            <RichTextBlock ns:MyStaticClass.IsVisible="{Binding IsSelected}" />
        </DataTemplate>
    </FlipView.ItemTemplate>
</FlipView>

更改SelectedItem时,可以将子视图模型上的IsSelected设置为true,并触发MyStaticClass.OnVisibilityChanged事件。