2012-11-08 29 views
0

假设我有一个名为MyProperty的只读依赖项属性,它有一个公共get和一个受保护的setter,有没有办法在UserControl的XAML上为这个属性设置一个初始值?有没有办法在它定义的控件的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. 

任何想法如何解决这个问题,而不诉诸于代码?

回答

1

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

其次,正如另一个答案所说,你的方法很不一致,因为你想从'外部'设置一个受保护的属性。

1

受保护的setter实现不可变/只读依赖项属性不是正确的方法。 使用SetValue和静态属性字段,值仍可以设置。你必须认识到,你试图隐藏的访问器只是一个方便(围绕公共可用SetValue的一个简单的包装)。

你看看这个MSDN文章:ReadOnly Dependency Properties?我知道这对于一个简单的场景来说是相当复杂的,但是嘿,WPF从来没有改过。

相关问题