我有一个包含标签 label
和 BO public Person Person {get;set;}
的 MyUserControl
。
我希望 Person 的 Name
始终绑定(bind)到 label
,如下所示:
("Name: {0}", person.Name
),如果 person != null
和
("Name: {0}", "(none)"
),如果 person == null
不仅如此,如果人名更改,标签会自动更新。
是否有可能进行这样的绑定(bind)?
“脏”变体:
private void label_LayoutUpdated(object sender, EventArgs e)
{
label.Content = string.Format("Name: {0}", _Person == null ?
"(none)" : _Person.Name);
}
最佳答案
怎么样:
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name: "/>
<TextBlock Text="{Binding Person.Name, FallbackValue='(none)'}"/>
</StackPanel>
这不使用标签,但它实现了目标。
如果它需要是一个标签,你可以这样做:
<Label Content="{Binding Person.Name, FallbackValue='(none)'}"
ContentStringFormat="Name: {0}"/>
这两种方法的一个警告是,如果绑定(bind)不正确,文本还将显示 Name: (none)
(Person == null 等同于未找到属性 Person 的行为)。
关于.net - 实现自定义绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320051/