私はIValueConverterを持っています。その仕事はBlockIdをConditionLabelに変換することです。問題は、私のModelオブジェクトが実際の変換を行うスマートなものであるということです。私のコード現時点では、この今のところ...XAMLのIValueConverterにデータを渡すにはどうすればよいですか?
public class BlockIdToConditionLabelConverter : IValueConverter
{
private Model _model;
public BlockIdToConditionLabelConverter(Model model)
{
_model = model;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int blockId = (int)value;
return _model.BlockIdToConditionLabel(blockId);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
のように見える、私はこのようなのResourceDictionaryで静的リソースを作成(およびそれ以降のDataTemplateでそれを参照してください):
<local:BlockIdToConditionLabelConverter
x:Key="_blockIdToConditionLabelConverter" />
問題は、私はこのコンバータに私のModelオブジェクトを渡す方法が必要です。どうすればいい?
ありがとうございました。
さて、私はMVVMを読んでいます:)パターンが解決したいと思うような問題に遭遇していたので、私はそれを使い始めるのが大変意味があるかもしれません。論理?私は「あなたのモデルのViewModelの内部で変換を実装する」という意味を十分に理解しています。私はIValueConvertersを全く使わないということですか?または、ViewModel(XAMLマークアップではなく)がそれらをインスタンス化するジョブを持っているだけですか?ありがとう! – devuxer
Modelクラスの実装方法がわかりません。 MVVMでは、WPFでモデルをDataContextとして使用する代わりに、ViewModelをDataContextとして使用します。 元々モデルのBlockIdプロパティをバインドしていたと思います。 ViewModelにはBlockIdの代わりにバインドするConditionLabelというプロパティがあります。このプロパティは、ゲッター内の変換を行います。 ViewModelがモデルのPropertyChangedに登録されるため、ViewModelでRaisePropertyChange( "ConditionLabel")を実行できます。 – decasteljau
私はMVVMについてもう少し読んだので、これは理にかなっています。変換したデータをViewModelに保存し、IValueConvertersを完全に削除するだけで済みます。しかし、私はこのIValueConverterをGridViewで使用する予定だったので、変換されたデータのテーブル全体をViewModel(単一のプロパティではない)に格納する必要があります。 IValueConverterはまだそれに意味がありますか?また、ブロックが完全なライトグレーのどこにあるすべてのGridViewセルを有効にしたいのですか? ViewModelに "IsComplete"テーブルを保存しても、それをまだ色に変換する必要があります。 – devuxer