DataTemplateにいくつかのコントロールがあるFlipViewがあります。FlipViewにあるため、これらのコントロールの複数のコピーが生成されます。現在のFlipViewビュー(つまり、画面上/表示中)にあるコントロールを見つけたい場合、どうすればよいですか?
内部のコントロールでロードされたイベントを確認できますが、複数回呼び出され、どれが表示されているのかわかりません。
DataTemplateにいくつかのコントロールがあるFlipViewがあります。FlipViewにあるため、これらのコントロールの複数のコピーが生成されます。現在のFlipViewビュー(つまり、画面上/表示中)にあるコントロールを見つけたい場合、どうすればよいですか?
内部のコントロールでロードされたイベントを確認できますが、複数回呼び出され、どれが表示されているのかわかりません。
次のように、ViewModelからRichTextBlockにバインドできるAttachedDependencyプロパティを作成します。
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イベントがトリガーされます。