WPF 绑定,OneWayToSource,“找不到属性获取方法。”
Posted
技术标签:
【中文标题】WPF 绑定,OneWayToSource,“找不到属性获取方法。”【英文标题】:WPF Binding, OneWayToSource, "Property Get method was not found." 【发布时间】: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 已损坏。 ***.com/questions/4875751/… 【参考方案1】:将您的基类属性 getter 和 setter 设置为 protected。
【讨论】:
【参考方案2】:我知道这已经很老了,但我想我会提到我在源代码中收到了同样的问题。我发现它是我正在搜索的类中的属性之一,它有一个 setter 但不是 getter。我添加了一个 getter,问题就解决了。
【讨论】:
【参考方案3】:我尝试了一些方法,下面的代码有效。我希望这会有所帮助:
代码隐藏:
public partial class MainWindow : Window
private SomeCustomType registry;
public SomeCustomType Registry set registry = value;
public MainWindow()
InitializeComponent();
this.comboBox.DataContext = this;
public class SomeType
public static SomeCustomType Property1 get return new SomeCustomType() Name = "Item1" ;
public static SomeCustomType Property2 get return new SomeCustomType() Name = "Item2" ;
public class SomeCustomType
public string Name get; set;
XAML:
<ComboBox x:Name="comboBox" SelectedValue="Binding Registry, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged"
SelectedValuePath="Tag" SelectedIndex="0">
<ComboBoxItem Content="Item1" Tag="x:Static local:SomeType.Property1" />
<ComboBoxItem Content="Item2" Tag="x:Static local:SomeType.Property2" />
</ComboBox>
【讨论】:
确实,这也适用于我。现在要弄清楚我做了什么不同的事情!感谢您提醒我,有时只需进行一次简单的健全性检查即可回答我自己的问题。 如果有人来这里寻找我最初问题的答案,我在调试选项中启用了 Break On Exception。这段代码和我自己的代码都抛出了异常,但不是未处理。自从我问了这个问题以来,我已经在其他地方读到过,尽管您会怎么想,它实际上确实可以访问 getter。不过,它似乎没有使用该值,因此无需担心。奇怪...【参考方案4】:我不完全确定问题出在哪里,但您绝对可以在没有 getter 的情况下绑定 OneWayToSource。我认为问题与您将标签(对象类型)绑定到 SomeCustomType 的属性有关。您可能必须使用 ValueConverter 才能使其工作。
【讨论】:
你好。感谢您的回答。我将属性更改为“对象”类型之一,然后对我的内部变量进行了“as”动态转换。这应该可以解决您提出的问题,不是吗?不幸的是,异常仍然存在。 你能发布你正在使用的完整课程和实际的 XAML 吗? 这是一个相当大的课程,但更重要的是,我在 NDA 下工作,所以我无法发布完整的课程。但是,上面的答案(健全性检查)似乎也对我有用,所以我想我至少从现在开始有一些工作要做。再次感谢您的帮助。以上是关于WPF 绑定,OneWayToSource,“找不到属性获取方法。”的主要内容,如果未能解决你的问题,请参考以下文章
WPF .Net 4 - OneWayToSource 绑定到只写属性适用于某些机器!如何?