2

私の MVVM ベースの WPF アプリケーションには、ContentControls または ContentPresenters に動的にロードされるさまざまな ViewModel タイプがたくさんあります。そのため、XAML で使用する DataTemplate を明示的に設定する必要があります。

<ContentControl Content={Binding SomePropertyOfTypeViewModel} ContentTemplate={StaticResource someTemplate} />

someTemplate現在、私の問題は、ContentControl が何もバインドされていない (つまり、ViewModel.SomePropertyOfTypeViewModel が null である) 場合でも、コンテンツ コントロールが UI を表示していることです。暗黙の DataTemplates を使用すると、すべてが期待どおりに機能します。残念ながら、ここではこのメカニズムを使用できません。

アップデート:

bool Visible私の現在の解決策は、親 ViewModel でプロパティとして公開されている ViewModel ごとに 1 つの追加のプロパティを持つことです。trueプロパティが null でない場合にのみ返されます。ContentControl の Visilibilty は、このプロパティにバインドされています。 ParentViewModel.SomePropertyOfTypeViewModelVisible, ParentViewModel.SomeOtherPropertyOfTypeViewModelVisible ...

<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding SomePropertyOfTypeViewModelVisible, Converter={StaticRresource boolToVisibiltyConverter}}" />

多くの余分なプロパティを維持する必要があるため、これはあまり満足のいくものではありません。

4

2 に答える 2

0

ContentControl の「Visibility」を設定すると問題が解決しますか? その場合、ViewModel で、バインド先の ContentControl の Visibility の Visibility プロパティを作成できます。プロパティでは、SomePropertyOfTypeViewModel が null かどうかを確認できます。SomePropertyOfTypeViewModel を設定するときに、ContentControlVisibility プロパティが変更されたことも通知する必要があります。

<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding ContentControlVisibility} />

public Visibility ContentControlVisibility
    {
        get
        {
            return SomePropertyOfTypeViewModel == null ? Visibility.Collapsed : Visibility.Visible;
        }
    }
于 2010-05-03T19:44:53.683 に答える
0

TemplateSelector を使用することは、それが得られるのと同じくらい良いようです。

于 2010-05-21T12:37:20.197 に答える