【发布时间】:2011-04-04 12:02:02
【问题描述】:
我在 WPF 窗口后面的代码中定义了一个公共 CLR 属性。该属性只定义了一个 setter。
public SomeCustomType SomeProperty {
set {
someValue = value;
}
}
我还在此 WPF 窗口的 XAML 中定义了一个 ComboBox。此 ComboBox 定义了两个 ComboBoxItem 对象。 ComboBoxItem 对象的 Content 属性设置为我要为这些项目显示的文本。 ComboBoxItem 对象的 Tag 属性设置为另一个类的静态 CLR 属性。 SelectedValuePath 在 ComboBox 上设置为“Tag”。我将 SelectedValue 绑定到 Window 的 CLR 属性,模式设置为 OneWayToSource,UpdateSourceTrigger 设置为 PropertyChanged。
<ComboBox SelectedValue="{Binding Registry, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Tag" SelectedIndex="0">
<ComboBoxItem Content="Item1" Tag={x:Static someNamespace:SomeType.SomeStaticCLRProperty}" />
<ComboBoxItem Content="Item1" Tag={x:Static someNamespace:SomeType.SomeStaticCLRProperty}" />
</ComboBox>
我想要发生的是:当在 ComboBox 中选择一个项目时,后面的 Window 代码中的 CLR 属性应该设置为选定的值。我不希望后面的代码设置 ComboBox 的值。
但是当我运行它时,我得到一个异常:“找不到属性获取方法。”。我读这篇文章的方式是抱怨我没有在 Window 的 CLR 属性上定义 getter。但我不认为我应该需要一个。
我在这里做错了什么吗?
谢谢!
编辑:我应该提到添加 getter 确实可以使它工作,但是只要 setter 这样做,getter 就会受到打击。此外,第一次调用 setter 时(当 Window 加载时),该值为 null。但是在用户选择某些东西之前,它不会再次被调用。我不应该第一次从所选值中获得有效值吗?
【问题讨论】:
-
OneWayToSource 已损坏。 stackoverflow.com/questions/4875751/…