2011-12-20 9 views
0

私のWPFアプリケーションでは、ContentControlを使用して他のページに移動しようとしています。 これまでのところ私のMainViewModelでは、MainViewModelの一部でなければならない他のビューモデルを開始しました。現在のページインジケータMVVM

私はこのようなDataTemplateをして、私のビューを表示:

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

を私はこの上でクリックしたとき、それはCurrentView」を設定しないビュー(モデル)ページ名のプロパティを表示するには、テキストブロックでのItemsControlを得ましたプロパティをViewModelに合わせて表示します。これは問題ありません...しかし、今私が遭遇する問題は、私が持っているCurrentViewをテキストブロックに表示させる方法です。たとえば、テキストブロックの残りの部分を別の色にして、 (モデル)がアクティブです。

私はDataTriggerでテキストブロックのスタイルでこれを実行しようとしましたが、これは定数値、任意のアイデアしか受け入れませんか?

答えて

1

それが組み込まれているので、選択機能ListBoxItemsControlを切り替えないのはなぜ?選択ハイライトを非表示にして、ItemsControlと同じように見えるようにスタイルを設定し、トリガーをListBoxItem.IsSelectedから外します。あなたがそれを行うにはしたくない場合は

は、おそらく現在のViewModelとアイテムが同じ、またはそうでない場合はfalseである場合にtrueを返しますコンバータ、アクティブビューモデルを渡すためにIMultiValueConverterを使用することができます。

+0

最初の提案は、最高のもののようです。ありがとう! 怠け者ではありませんが、項目をリストボックス内で水平に整列させるにはどうすればよいですか? – MrZunz

+0

@MrZunz 'ListBox.ItemsPanel'テンプレートを上書きして横型' StackPanel'や 'WrapPanel'(デフォルトは縦型' StackPanel')を使用することができます – Rachel

+0

さて、今すぐ取得しました。しかし、選択した項目の前景を設定するのにまだ問題があります。 googleで見つけ出すには十分ですが、彼らはすべて気違いです。 – MrZunz

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">