私は四角で表示し、ブール変数に応じて塗りつぶしを特定のブラシに設定します。このため、私はViewModelにDependencyPropertyを追加しました。ビューでビューモデルで依存関係プロパティを使用して矩形の塗りを変更する
public static readonly DependencyProperty FalseColorProperty = DependencyProperty.Register(
"FalseColor",
typeof(Brush),
typeof(BooleanRectangleView),
new FrameworkPropertyMetadata(Application.Current.FindResource("LightGreyBrush"), FrameworkPropertyMetadataOptions.AffectsRender));
public Brush FalseColor
{
get { return (Brush)GetValue(FalseColorProperty); }
set { SetValue(FalseColorProperty, value); }
}
、私は私がViewModelにでたDependencyPropertyを持っているので作成するとき、私はそれを設定する方法がわからない、次のトリガ
<DataTrigger Binding="{Binding DataContext.Model.Variable, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="false">
<Setter Property="Fill" Value="{Binding DataContext.FalseColor, RelativeSource={RelativeSource AncestorType=UserControl}}" />
</DataTrigger>
で長方形にスタイルを追加しましたUserControl。たとえば、次はまた
<BooleanRectangleView FalseColor="..."/>
を動作しません、私はプログラムを実行しているとき、私はViewModelにのコンストラクタで例外を取得:
デフォルトのタイプはの型と一致しません(ドイツ語からの翻訳)プロパティ
FalseColor
EDIT:
私は新しい例外を取得ブラシににfindResourceを唱えたとき:
プロパティ
FalseColor
のデフォルト値は、特定のスレッド
にバインドすることはできません、私はそれがにfindResourceではない何かを持っていると思いますディスパッチャスレッドから必ず呼び出されますか?
DPをViewModelクラスに配置すると、このクラスはDependencyObjectになります。あなたはそれを望んでいません。 INotifyPropertyChangedを発生させるPropertyのみが必要です。あなたはたぶん間違いを犯したでしょう、おそらくViewクラスにあります。問題について:スタイルとDataTriggerにFalseColorを設定する必要があります。デフォルト値の問題:FindResourceをブラシにキャストする必要があります – nkoniishvt
@nkoniishvt:なぜ私はViewModelをDependencyObjectにしたくないのか説明できますか? – gartenriese
依存関係プロパティを持つ理由(通常)は、ビューモデルのプロパティには適用されません。ビューモデルプロパティをバインディングの対象にしたり、スタイル設定ツールで設定したり、アニメーション化したりすることは望ましくありません。 – Clemens