0

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

我可以在里面的控件上检查加载的事件,但它会被多次调用,我不知道显示的是哪一个。

4

1 回答 1

1

创建一个可以从 ViewModel 绑定到 RichTextBlock 的 Attached Dependency 属性,例如:

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 更改时,您可以将子 View Model 上的 IsSelected 设置为 true,这会触发 MyStaticClass.OnVisibilityChanged 事件。

于 2012-10-08T03:29:12.047 回答