我有一个FlipView,其中包含DataTemplate中的一些控件。由于它在FlipView中,它将生成这些控件的多个副本。如果我想找到当前FlipView视图中的控件(即屏幕/可见),我该怎么办?
我可以检查控件内部的加载事件,但会多次调用,我不知道哪一个被显示。
答案 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事件。