WPF中在Textblock中绑定Run会导致异常

13

我正试图将两个 <Run> 绑定到一个 TextBlock 中,就像下面的代码片段所示。但是我收到了一个 XamlParseException

基本上我想要实现这种格式:

CodeNum: LongDescription

如果下面的代码注定会失败,我还有什么其他选择?

<TextBlock>
    <Run FontWeight="Bold" Text="{Binding CodeNum}"/>
    <Run FontWeight="Bold" Text=": "/>
    <Run Text="{Binding LongDescription}"/>
</TextBlock>
1个回答

32

我猜测LongDescription或者CodeNumis至少一个是只读属性(没有公共 setter)。你需要将所有在Run中使用的只读属性的绑定方式改为单向绑定。

<Run Text="{Binding LongDescription, Mode=OneWay}"/>

我相信,默认情况下,“Run”元素的绑定模式仅为单向。如果我错了,请纠正我。 - Sriram Sakthivel
5
谢谢 dkozl,实际上将模式更改为“单向”解决了问题。 - Vahid
2
@SriramSakthivel,默认情况下,“Run”会双向绑定“Text”,如果属性没有公共setter,它将导致异常。 - dkozl
1
@Sriram Sakthivel 真幸运,我的应用程序刚刚进入中断模式,却没有告诉我任何关于异常来源的信息。我很高兴最近只更改了这一个东西,所以知道将我的运行绑定到表达式主体属性是有问题的。寻找原因已经够痛苦了。现在我只是想知道,为什么会这样呢?我可以很好地绑定到 TextBlock 的 Text 属性,而不需要使用 setter,为什么 Run 表现不同呢? - Otto Abnormalverbraucher
4
有人能解释一下(或指出相关文档),为什么Run有一个默认的Mode=TwoWay?我的意思是,用户是否能够以任何方式更改我绑定到Run的文本?在我看来,Run只是一种将不同的只读文本片段绑定在单个TextBlock中的方法。我错了吗? - Manuzor
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接