2016-04-28 12 views
0

私はPrism 6を使用してアプリケーションを構築していますが、MVVM、データバインディング、これらのデザインパターンはすべて新しいです。このアプリケーションでは、ビューモデルの一部のプロパティの値によって異なる色を表示するという要件があります。そうするにはPrismアプリケーションでのSolidColorBrushのバインド

ので、同じように、私はリソースディクショナリにいくつかのSolidColorBrushを持っている:<SolidColorBrush x:Key="{x:Static status:Status.notViewed}">#FFe74856</SolidColorBrush>

はその後、私の見解では、私が使用:prism:ViewModelLocator.AutoWireViewModel="True"それは、対応するビューモデルに配線しています。私はキャンバス上のバインディングも使用していますが(グリッドか何か他のもの、私は気にしません)、<Canvas Background="{Binding B}" Margin="5" />。副次的なこととして、他の要素にバインドされた要素があります。たとえば、文字列にバインドされた日付を表示するような要素があり、それが問題ありません。

私のビューモデルでは、対応するプロパティBをバインディングpublic SolidColorBrush B = (SolidColorBrush)Application.Current.Resources[Status.notViewed];に作成します。

私は自分のアプリケーションを実行して、キャンバスは、しかし、私はI出力のビューモデル(Console.WriteLine("Color: {0}", B.ToString()); 0のコンストラクタ内のコンテンツと、私は右の値を取得するためBブラシが含まれていることをかなり確信している...白いままです。

私が間違って何をしているのですか?

おかげ

答えて

0

表現

public SolidColorBrush B 
    = (SolidColorBrush)Application.Current.Resources[Status.notViewed]; 

を助ける

希望は、公共分野ではなく、プロパティを宣言します。プロパティは次のようになります。

public SolidColorBrush B { get; set; } 
    = (SolidColorBrush)Application.Current.Resources[Status.notViewed]; 

WPFでのデータバインディングは、パブリックプロパティのみで動作します。

+0

あなたは私の問題を解決するのを手伝っただけでなく、フィールドとプロパティの違いを私が実際には分かっていないこともわかりました。私は基本に戻る必要があると思う:) –

-1

あなたはこれを達成するための簡単な方法は、以下の

class ConditionToBackgroundConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if(value.ToString() == "Condition over here") 
      { 
       return new SolidColorBrush(System.Windows.Media.Colors.Aqua); 
      }else 
      { 
       return new SolidColorBrush(System.Windows.Media.Colors.Blue); 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return null; 
     } 
    } 
で似IValueConverterすることで使用することができますしてくださいcondtionは、あなたがあなたの結合に続い

この

<Canvas Background="{Binding Condition,Converter={StaticResource ConditionToBackgroundConverter }}" Margin="5" /> 

ような何かをしかし、あなたのwindow.resource内のリソースまたは結合上記でapp.xaml

注条件としてConditionToBackgroundConverterを含めることを忘れていけないですfor.Itはあなたのviewmodelのプロパティとして宣言する必要があります。これは

+0

回答ありがとうございますが、それはうまくいきませんでした。私は自分の財産のセッターとゲッターをフィールドにしていないので、@クレメンスが指摘したようにバインドできませんでした。 さらに、私はすでにブラシの辞書を持っています。私はコンバータを作成したくないです。辞書を持っていて、MVVMを使用しているでしょう(いくつかのブラシは辞書に保存されています。分離、維持することがより困難)。 PS:それを批判の対象にしてはいけません。私はダウン投票した人ではありません。 –

+0

OK私の答えはなぜ私の答えが問題を解決するために別の方法であるのかを説明する必要があります。私は特定の問題を解決するためにリファクタリングすることができるガイドを与えるために何をしたのですか? – suulisin

関連する問題