我在 DataTemplate 中有一个带有一些控件的 FlipView。由于它位于 FlipView 中,因此它将生成这些控件的多个副本。如果我想找到当前 FlipView 视图中的控件(即在屏幕上/可见),我该怎么做?
我可以在里面的控件上检查加载的事件,但它会被多次调用,我不知道显示的是哪一个。
我在 DataTemplate 中有一个带有一些控件的 FlipView。由于它位于 FlipView 中,因此它将生成这些控件的多个副本。如果我想找到当前 FlipView 视图中的控件(即在屏幕上/可见),我该怎么做?
我可以在里面的控件上检查加载的事件,但它会被多次调用,我不知道显示的是哪一个。
创建一个可以从 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 事件。