2016-03-21 3 views
0

私はWPFフォームを作成したいとしましょう。 このフォームには、たくさんのタイトルとサブタイトルがあります。 これらのタイトルとサブタイトルは、同じコントロールをプレゼンテーションに使用します。 このコントロールは、上のセパレータと下のセパレータの間の単なるラベルです。 タイトルには両方のセパレータが必要です。サブタイトルには下部セパレータのみが必要です。 このコントロールには、ブール依存関係プロパティがあります。 trueに設定されている場合は、上部セパレータがあります。MVVMパターンのビューの特定のモデルですか?

各タイトル/サブタイトルのモデルでこのプロパティをバインドすることはできますか?

public class MyModelObject : ViewModelBase 
{ 
    private string _labelName; 
    public string LabelName 
    { 
     get 
     { 
     return _labelName; 
     } 
     set 
     { 
      _labelName=value; 
      RaisePropertieChanged(()=>LabelName); 
     } 
    } 

    private bool _topSeparator; 
    public bool TopSeparator 
    { 
     get 
     { 
     return _topSeparator; 
     } 
     set 
     { 
      _topSeparator=value; 
      RaisePropertieChanged(()=>TopSeparator); 
     } 
    } 
} 

私はそれほど好きではありません...モデルはビューに関する情報を持たないはずですから。しかし、それを行うためのきれいな方法はありますか?

私はビューの特定のモデルを考えていました...しかし、私はそれについては分かりません。

ありがとうございます!

----------------ヴァディム・マルティノフが提案されているようIValueConverterを見た後にUPDATE -----------------

私は、これらの状況を処理するためにモデルをラップした人々を見ました。 は、これが私の結論である:1つのまたは2のビューの特定のプロパティがある場合

  • 、ただ作る1つまたは2つの特定のIValueConverter
  • いくつかのビューの特定のプロパティがある場合、それは持っている(ラッパーを作成するのが最善ですこのポストを見てください:Binding Model properties directly in View

私はそうですか?

答えて

1

ビューの合成プロパティを作成する代わりに、実際のデータをバインドするには、IValueConverterを使用する必要があります。

たとえば、あなたはTitleSubtitleText要素が含まれTitleType列挙を持つことができます。

public class TitleTypeToSeparatorVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var titleType = (TitleType) value; 
     switch(titleType) 
     { 
      case TitleType.Title: 
       // return some value 
      case TitleType.Subtitle: 
       // return some another one value 
      default: 
       // handle this scenario 
     } 
    } 
} 

Read more about IValueConverter

+0

非常に便利:

次に、新しいコンバータを書きます!私はIValueConverterについて知っていましたが、私はこのように使用するとは思わなかった。彼らはすべての "問題を見る"のために行く方法ですか?つまり、「ビューのモデル」を構築する必要はありませんか? (ところで、わたしの英語は残念ですが、わかるように、それは私の母国語ではありません:p) – Speuline

+1

@Speuline "Viewのためのモデル"を構築​​する必要はありません。次にModelクラスがあり、ビューでデータを調整する必要があります。ビューには、Visibiliity、Color、Brushなどのプラットフォーム固有のプロパティを含めることができます。 ViewModelクラスまたはModelクラスでは使用しないでください。次に、データ(モデル)からビューへのコンバータを作成し、そのコンバータでデータプロパティをバインドする必要があります。 また、データトリガーを使用することもできます。 あなたはそのようにあなたのモデルにあなたの見解を熟知していますか? –

+1

@Speulineまた、ビュー用に特別にプロパティを作成するのは悪い考えかもしれませんが、私は同意します。しかし、あなたは既にタイトルレベルを示すいくつかの価値を持っています。これを使用して、この既存のプロパティのコンバーターを作成することができます。 –

関連する問題