DataTrigger не работает при выборе элемента списка - PullRequest
0 голосов
/ 03 июля 2019

У меня есть поле со списком, которое должно динамически заполняться.

Когда пользователь выбирает элемент из поля со списком, должна отображаться метка.

Это работает, когда я используюстатическое поле со списком, но когда поле со списком является динамическим, это не так.Я почти уверен, что это связано с полем Name элемента поля со списком.

Вот код:

C #:

public ObservableCollection<ComboBoxItem> cbItems { get; set; }
public ComboBoxItem SelectedcbItem { get; set; }

public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;

        cbItems = new ObservableCollection<ComboBoxItem>();

        var cbItem = new ComboBoxItem { Content = "<--Select-->"};
        SelectedcbItem = cbItem;
        cbItems.Add(cbItem);

        var cbItem1 = new ComboBoxItem();
        cbItem1.Content = "Option 1";
        cbItem1.Name = "iOne";

        var cbItem2 = new ComboBoxItem();
        cbItem2.Content = "Option 2";
        cbItem2.Name = "iTwo";

        cbItems.Add(cbItem1);
        cbItems.Add(cbItem2);


    }

XAML:

<ComboBox Width="130" ItemsSource="{Binding cbItems}" SelectedItem="{Binding SelectedcbItem}" Grid.Column="0" Grid.Row="4" Grid.ColumnSpan="2" VerticalAlignment="Bottom" HorizontalContentAlignment="Center"/>

<Label Content="One is shown" Grid.Column="0" Grid.Row="6">
    <Label.Style>
        <Style TargetType="Label">
            <Setter Property="Visibility" Value="Hidden" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=iOne, Path=IsSelected}"    Value="True">
                    <Setter Property="Visibility"  Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Label.Style>
   </Label>

1 Ответ

2 голосов
/ 03 июля 2019

Используйте этот XAML

<ComboBox x:Name="cb"
          ItemsSource="{Binding CbItems}" SelectedItem="{Binding SelectedCbItem}" .../>

<Label Content="One is shown" ...>
    <Label.Style>
        <Style TargetType="Label">
            <Setter Property="Visibility" Value="Hidden" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=cb, Path=SelectedItem}"
                             Value="Option 1">
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Label.Style>
</Label>

с этим кодом:

public List<string> CbItems { get; }
public string SelectedCbItem { get; set; }

public MainWindow()
{
    InitializeComponent();
    cbItems = new List<string> { "Option 1", "Option 2" };
    DataContext = this;
}

В качестве альтернативы:

<DataTrigger Binding="{Binding ElementName=cb, Path=SelectedIndex}" Value="0">

Если вы хотите, чтобы DataTrigger использовал привязку к исходному свойству SelectedCbItem, например

<DataTrigger Binding="{Binding SelectedCbItem}" Value="Option 1">

это свойство должно запускать уведомление об изменении свойства, например, событие PropertyChanged интерфейса INotifyPropertyChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...