0

MyPropertyという読み取り専用の依存関係プロパティがあります。これにはパブリックgetと保護されたセッターがあります。UserControlのXAMLでこのプロパティの初期値を設定する方法はありますか?

問題は2つあります。最初にXAMLのプロパティを直接参照することはできません。これは、最上位の要素が参照されているためですが、次のトリックでその問題を解決しました。

<UserControl.Style>
    <Style>
        <Setter Property="local:MyUserControl.MyProperty" Value="{Binding someProperty}" />
    </Style>
</UserControl.Style>

これにより、

The Property Setter 'MyProperty' cannot be set because it does not have an accessible set accessor.

コードに頼らずにこれを回避する方法はありますか?

4

2 に答える 2

1

不変/読み取り専用の依存関係プロパティを実現するための保護されたセッターは、正しい方法ではありません。SetValueと静的プロパティフィールドを使用すると、値を設定できます。非表示にしようとしているアクセサーは単なる便利なものであることを理解する必要があります(公開されているSetValueの軽いラッパー)。

このMSDNの記事「ReadOnlyDependencyProperties 」をご覧になりましたか?このような単純なシナリオではかなり複雑であることはわかっていますが、WPFを単純にすることは決してありませんでした。

于 2012-11-08T08:12:02.570 に答える
1

(だけでなく)MVVMの基本的な考え方の1つは、提示されたデータからのデータ提示(ビュー)の定義をカプセル化することです。私の意見では、あなたがやろうとしているのは実際にはMVVMスタイルではありません。データフィールドのデフォルト値は、データの表示ではなく、データに属するものと見なします。では、ViewModelでデフォルト値を設定してみませんか。これはより理にかなっており(ViewModelを使用する架空の2番目のビューを考えてみてください:同じデフォルト値が必要です)、問題はありません。何か理由はありますか?デフォルト値はビュー固有であると考えているため、そこで定義したいですか?

第二に、他の答えが言うように、あなたは「外部」から保護されたプロパティを設定したいので、あなたのアプローチはかなり一貫性がありません。

于 2012-11-08T08:51:12.677 に答える