【发布时间】:2012-11-06 17:32:30
【问题描述】:
我有一个TabItem 的子类,如下所示,我正在尝试为其设置Header 属性。我用MultiBinding 试过这个:
<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
<DataEditPane.Header>
<MultiBinding StringFormat="Hello world {0} {1}">
<Binding Path="BoundVariable1" />
<Binding Path="BoundVariable2" />
</MultiBinding>
</DataEditPane.Header>
</DataEditPane>
但它失败了:
System.Windows.Data Error: 28 : MultiBinding failed because it has no valid Converter. MultiBindingExpression:target element is 'MyDataEditPane' (Name=''); target property is 'Header' (type 'Object')
System.Windows.Data Error: 28 : MultiBinding failed because it has no valid Converter. MultiBindingExpression:target element is 'MyDataEditPane' (Name=''); target property is 'Header' (type 'Object')
我一直认为StringFormat 充当转换器的角色,但也许不是?
将字段包装在某种容器中,例如Label,似乎也不起作用:
<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
<DataEditPane.Header>
<Label>
<Label.Text>
<MultiBinding StringFormat="Hello world {0} {1}">
<Binding Path="BoundVariable1" />
<Binding Path="BoundVariable2" />
</MultiBinding>
</Label.Text>
</Label>
</DataEditPane.Header>
</DataEditPane>
在这种情况下,标签的.ToString() 表示(“System.Windows.Controls.Label”)显示为标题。
请注意,单个绑定可以正常工作:
<DataEditPane x:TypeArguments="MyType" x:Class="MyDataEditPane">
<DataEditPane.Header>
<Binding Path="BoundVariable1" />
</DataEditPane.Header>
</DataEditPane>
如果重要的话,我在继承层次结构中使用 Syncfusion TabItemExt 作为我的超类之一,但由于该类不会覆盖 Header 属性,我认为这没有什么不同。
我做错了什么?我知道我可以在 ViewModel 中创建另一个属性作为 Header(然后单绑定),但我想学习如何在 XAML 中正确执行此操作。
【问题讨论】:
标签: c# wpf xaml multibinding syncfusion