0

コンバーターが色を決定するには、ViewModel の 2 つのプロパティが必要なため、完全な ViewModel にバインドしたいと思います。

{Binding Converter={StaticResource ErrorCountToSignalColorConverter}

これにより、コンバーターは ViewModel を取得し、2 つのプロパティ (ErrorCount と HasReceivedData) を読み取ることができます。ただし、プロパティの 1 つが変更されても、バインディングは更新されません。もちろん、両方のプロパティで OnPropertyChange() が発生しています。

両方のプロパティのいずれかが変更されたときに、ビューを (正しい色で) 更新するにはどうすればよいですか?

4

2 に答える 2

2

MultiBinding を使用してビューから両方のプロパティを渡すことができますが、その場合、ErrorCount/HasReceivedData/Signal 間の依存関係が UI コードに漏れます (使用するたびに繰り返す必要があります)。ビュー モデルの主な目標の 1 つは、このようにビューを詳細から分離できるようにすることです。

列挙型を使用して一連の可能性を表すことをお勧めします。

public enum SignalLevel {
    Low,
    Medium,
    High
}

次に、現在のコンバーター ロジックを色ではなくこれらの値に適用し、ビュー モデル内の単一のプロパティに移動します。

public SignalLevel SignalLevel {
    get {
        // choose a level based on ErrorCount and HasReceivedData
    }
}

ビュー モデルでは、ErrorCountまたはが変更されるたびに、をHasReceivedData上げます。NotifyPropertyChangedSignalLevel

ビューで、信号レベルから色への単純な変換を行います。

{Binding SignalLevel, Converter={StaticResource SignalToColorConverter}}
于 2013-10-22T16:55:50.377 に答える
2

この場合、 MultiValueConverterを使用してマルチバインディングを選択する必要があります。ErrorCount複数のプロパティ ( 、および) をビューにバインドHasReceivedDataし、任意のプロパティの変更が反映されます。

MSDN の単純な例 - マルチバインディング

于 2013-10-22T16:36:45.090 に答える