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 中,您需要提供路径作为 ComboBoxSelectedValue 而不是 PropertyName.

<DataTrigger Binding="{Binding ElementName=MyWPFCombo, Path=SelectedValue}" Value="10">
                        <Setter Property="Text" Value="Select the old items:" />
                    </DataTrigger>

您正在绑定到 ComboBoxId 属性,但是,此 属性 并不存在。您需要使用 SelectedItem 属性 来访问所选项目及其属性:

<DataTrigger Binding="{Binding SelectedItem.Id, ElementName=MyWPFCombo}" Value="10">
    <Setter Property="Text" Value="Select the old items:" />
</DataTrigger>