0

假设我有一个名为 MyProperty 的只读依赖属性,它有一个公共 get 和一个受保护的 setter,有没有办法在 UserControl 的 XAML 上设置这个属性的初始值?

问题有两个方面:首先,您不能直接引用 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

(不仅仅是)MVVM 的基本思想之一是从呈现的数据中封装数据呈现(View)的定义。在我看来,你想要做的并不是真正的 MVVM 风格。我会认为数据字段的默认值是属于数据的东西,而不是它的表现形式。那么,为什么不在 ViewModel 中设置默认值。这更有意义(考虑使用 ViewModel 的假设的第二个视图:您仍然需要相同的默认值)并且您没有任何问题。是否有任何原因,您认为默认值是特定于视图的,因此想在那里定义它?

其次,正如另一个答案所说,您的方法非常不一致,因为您想从“外部”设置受保护的属性。

于 2012-11-08T08:51:12.677 回答
1

实现不可变/只读依赖属性的受保护设置器不是正确的方法。使用 SetValue 和静态属性字段仍然可以设置值。您必须意识到您试图隐藏的访问器只是一种便利(公共可用 SetValue 的轻包装)。

您是否看过这篇 MSDN 文章:ReadOnly Dependency Properties?我知道这样一个简单的场景是相当复杂的,但是,嘿,WPF 从来没有变得简单。

于 2012-11-08T08:12:02.570 回答