我目前正尝试根据Level枚举值基于3个不同的对象有条件地绑定一个文本框。在下面的代码示例中,我希望实现的是根据以下条件显示值:
- 人员0级,绑定显示视图模型.人员.0级.姓名
- 人员一级,绑定显示视图模型.人员.一级.名称
- 人员二级,绑定显示视图模型.人员.二级.姓名
尽管如此,我遇到的问题是没有一个对象像我希望的那样显示。文本框仍然是空的,没有显示任何值。我做错了什么?
<TextBox Margin="0,0,0,5">
<interactivity:Interaction.Behaviors>
<core:DataTriggerBehavior Binding="{x:Bind ViewModel.Person.Level, FallbackValue='', Mode=OneWay}" ComparisonCondition="Equal" Value="Level0">
<core:ChangePropertyAction PropertyName="Text" Value="{x:Bind ViewModel.Person.Level0.Name, FallbackValue=''}" />
</core:DataTriggerBehavior>
<core:DataTriggerBehavior Binding="{x:Bind ViewModel.Person.Level, FallbackValue='', Mode=OneWay}" ComparisonCondition="Equal" Value="Level1">
<core:ChangePropertyAction PropertyName="Text" Value="{x:Bind ViewModel.Person.Level1.Name, FallbackValue='', Mode=OneWay}" />
</core:DataTriggerBehavior>
<core:DataTriggerBehavior Binding="{x:Bind ViewModel.Person.Level, FallbackValue='', Mode=OneWay}" ComparisonCondition="Equal" Value="Level2">
<core:ChangePropertyAction PropertyName="Text" Value="{x:Bind ViewModel.Person.Level2.Name, FallbackValue='', Mode=OneWay}" />
</core:DataTriggerBehavior>
</interactivity:Interaction.Behaviors>
</TextBox>
2条答案
按热度按时间zsbz8rwp1#
这应该行得通。
注:
string
而不是Person
类中的Level
,因为enum
绑定似乎不适用于ChangePropertyAction
(我不确定)。ChangePropertyAction
内绑定ViewModel。ckx4rj1h2#
我做错了什么?
1.在不支持
x:Bind
的地方使用它1.在视图的XAML标记中实现逻辑
x:Bind
直接指向视图模型的另一个只读属性,该属性的定义如下:C#是一种比XAML更有表现力、更简洁的语言,虽然它可能 * 有可能 * 只在标记中创建一个相当复杂的视图,但这并不意味着这样做总是一个好主意。在这种情况下,您应该将逻辑移到视图模型或
Person
类本身。