WPF Textblock 文本不会在组合框所选项目上动态更改
WPF Textblock text does not change dynamically on combobox selected item
我有一个 MVVM 应用程序。在主 WPF window 中,我有一个组合框和一个文本块以及其他控件。
当我 select 组合框中的值时,文本块文本应根据组合框中的项目 select 动态更改其文本值(取决于 select组合框中的项目)。
我的问题是,当我 select 组合框中的一个项目时,文本块文本没有改变,它始终具有默认值。有什么解决办法吗?
我只想使用 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>
您需要提供两样东西
1) 需要设置ComboBox的SelectedValuePath
<ComboBox x:Name="MyWPFCombo" SelectedValuePath="Id"
ItemsSource="{Binding MyItems}" />
2) 在 DataTrigger
中,您需要提供路径作为 ComboBox
的 SelectedValue
而不是 PropertyName.
<DataTrigger Binding="{Binding ElementName=MyWPFCombo, Path=SelectedValue}" Value="10">
<Setter Property="Text" Value="Select the old items:" />
</DataTrigger>
您正在绑定到 ComboBox
的 Id
属性,但是,此 属性 并不存在。您需要使用 SelectedItem
属性 来访问所选项目及其属性:
<DataTrigger Binding="{Binding SelectedItem.Id, ElementName=MyWPFCombo}" Value="10">
<Setter Property="Text" Value="Select the old items:" />
</DataTrigger>
我有一个 MVVM 应用程序。在主 WPF window 中,我有一个组合框和一个文本块以及其他控件。
当我 select 组合框中的值时,文本块文本应根据组合框中的项目 select 动态更改其文本值(取决于 select组合框中的项目)。
我的问题是,当我 select 组合框中的一个项目时,文本块文本没有改变,它始终具有默认值。有什么解决办法吗?
我只想使用 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>
您需要提供两样东西
1) 需要设置ComboBox的SelectedValuePath
<ComboBox x:Name="MyWPFCombo" SelectedValuePath="Id"
ItemsSource="{Binding MyItems}" />
2) 在 DataTrigger
中,您需要提供路径作为 ComboBox
的 SelectedValue
而不是 PropertyName.
<DataTrigger Binding="{Binding ElementName=MyWPFCombo, Path=SelectedValue}" Value="10">
<Setter Property="Text" Value="Select the old items:" />
</DataTrigger>
您正在绑定到 ComboBox
的 Id
属性,但是,此 属性 并不存在。您需要使用 SelectedItem
属性 来访问所选项目及其属性:
<DataTrigger Binding="{Binding SelectedItem.Id, ElementName=MyWPFCombo}" Value="10">
<Setter Property="Text" Value="Select the old items:" />
</DataTrigger>