0

私の WPF アプリケーションでは、ContentControl を使用して他の「ページ」に移動しようとしています。これまでのところ、これは機能しています。MainViewModel で、MainViewModel の一部である必要がある他のビューモデルを開始しました。

ビューを次のようなデータ テンプレートで表示します。

        <DataTemplate DataType="{x:Type vm:NewsViewModel}">
            <Views:NewsView />
        </DataTemplate>

View(models) PageName プロパティを表示する TextBlocks を持つ ItemsControl を取得しました。これをクリックすると、「CurrentView」プロパティが ViewModel に設定され、表示されます。だから、これは問題ではありません...しかし、私が今遭遇した問題は、テキストブロックに私が持っているCurrentViewを表示させる方法です。 (モデル) はアクティブです。

DataTrigger を使用してテキストブロックのスタイルでこれを実行しようとしましたが、これは定数値のみを受け入れます。何かアイデアはありますか?

4

2 に答える 2

1

には選択機能が組み込まれてItemsControlいるため、 を に切り替えてみませんか? ListBox選択ハイライトを非表示にし、 と同じように見えるようにスタイルを設定しItemsControl、トリガーを からベースにすることができますListBoxItem.IsSelected

それをしたくない場合は、おそらくIMultiValueConverterを使用して、現在の ViewModel とアクティブな ViewModel をコンバーターに渡すことができます。コンバーターは、アイテムが同じ場合は True を返し、そうでない場合は False を返します。

于 2011-12-20T16:06:07.337 に答える
0

IValueConverter提供されたビューがアクティブなビューであるかどうかを返す を作成し、それを DataTrigger のバインディングに追加します。

サンプルコンバーター:

public class IsViewActiveConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == [activeView];
    }
}

サンプル xaml:

<UserControl.Resources>
     <local:IsViewActiveConverter x:Key="IsViewActive"/>
</UserControl.Resources>

<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True"> 
于 2011-12-20T15:45:05.460 に答える