WPF Textblock text does not change dynamically on combobox selected item

自古美人都是妖i 提交于 2020-01-25 10:40:24

问题


I have a MVVM app. In main WPF window I have a combox and a textblock among other controls.

When I select a value from the combobox, the textblock text should change its text value dynamically according to the item selected in the combobox (depending on the id of the selected item in combobox).

My problem is that when I select a item in the combobox, textblock text does not change, it always have the default value. Any ideas how to solve this?

I want to do this using xaml only.

Model:

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 Property in view model:

private ObservableCollection<Item> _myItems;
public ObservableCollection<Item> MyItems
{
    get { return _myItems; }
    set { _myItems= value; }
}

View:

<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:


You need to provide two things

1) You need to set the SelectedValuePath of ComboBox.

 <ComboBox x:Name="MyWPFCombo"       SelectedValuePath="Id"  
      ItemsSource="{Binding MyItems}" />

2) In DataTrigger you need to provide the Path as SelectedValue of ComboBox not the PropertyName.

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



回答2:


You are binding to the Id property of your ComboBox, however, this property doesn't exist there. You need to use the SelectedItem property to access the selected item and thus its properties :

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


来源:https://stackoverflow.com/questions/53857077/wpf-textblock-text-does-not-change-dynamically-on-combobox-selected-item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!