Текст текстового блока WPF не изменяется динамически в выбранном элементе списка. - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть приложение MVVM.В главном окне WPF у меня есть поле со списком и текстовый блок среди других элементов управления.

Когда я выбираю значение из выпадающего списка, текстовый блок должен динамически менять свое текстовое значение в соответствии с элементом, выбранным в выпадающем списке (в зависимости отидентификатор выбранного элемента в выпадающем списке).

Моя проблема заключается в том, что при выборе элемента в выпадающем списке текст текстового блока не изменяется, он всегда имеет значение по умолчанию.Любые идеи, как решить эту проблему?

Я хочу сделать это, используя только 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>

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы привязываетесь к свойству Id вашего ComboBox, однако этого свойства там не существует.Вам нужно использовать свойство SelectedItem для доступа к выбранному элементу и, следовательно, к его свойствам:

<DataTrigger Binding="{Binding SelectedItem.Id, ElementName=MyWPFCombo}" Value="10">
    <Setter Property="Text" Value="Select the old items:" />
</DataTrigger>   
0 голосов
/ 19 декабря 2018

Вам нужно предоставить две вещи

1) Вам необходимо установить SelectedValuePath ComboBox.

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

2) В DataTrigger вам необходимо указать путь какSelectedValue из ComboBox не PropertyName .

<DataTrigger Binding="{Binding ElementName=MyWPFCombo, Path=SelectedValue}" Value="10">
                        <Setter Property="Text" Value="Select the old items:" />
                    </DataTrigger>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...