我有一个MVVM应用程序。在WPF主窗口中,除了其他控件外,我还有一个combox和一个textblock。
当我从组合框中选择一个值时,文本块文本应根据组合框中选择的项目(取决于组合框中所选项目的ID)动态更改其文本值。
我的问题是,当我在组合框中选择一个项目时,文本块文本不会更改,它始终具有默认值。有什么想法可以解决这个问题吗?
我只想使用xaml。
模型:
public class Item
{
#region Constructors
public Item() { }
public Item(int id, string desc)
{
this.Id = id;
this.Desc = desc;
}
#endregion
#region Properties
public int Id
{
get;
set;
}
public string Desc
{
get;
set;
}
#endregion
public override string ToString()
{
return this.Desc;
}
}
视图模型中的MVVM属性:
private ObservableCollection<Item> _myItems;
public ObservableCollection<Item> MyItems
{
get { return _myItems; }
set { _myItems= value; }
}
查看:
<ComboBox x:Name="MyWPFCombo"
ItemsSource="{Binding MyItems}"/>
<TextBlock Padding="5 10 0 0">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="Select the items:" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyWPFCombo, Path=Id}" Value="10">
<Setter Property="Text" Value="Select the old items:" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
答案 0 :(得分:2)
您需要提供两件事
1)您需要设置ComboBox的SelectedValuePath
。
<ComboBox x:Name="MyWPFCombo" SelectedValuePath="Id"
ItemsSource="{Binding MyItems}" />
2)在DataTrigger
中,您需要提供路径为SelectedValue
的{{1}},而不是 PropertyName 。
ComboBox
答案 1 :(得分:1)
您正在绑定到Id
的{{1}}属性,但是该属性不存在。您需要使用ComboBox
属性来访问所选项目,从而访问其属性:
SelectedItem