0

DataTemplateにいくつかのコントロールがあるFlipViewがあります。FlipViewにあるため、これらのコントロールの複数のコピーが生成されます。現在のFlipViewビュー(つまり、画面上/表示中)にあるコントロールを見つけたい場合、どうすればよいですか?

内部のコントロールでロードされたイベントを確認できますが、複数回呼び出され、どれが表示されているのかわかりません。

4

1 に答える 1

1

次のように、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イベントがトリガーされます。

于 2012-10-08T03:29:12.047 に答える