В WPF я хочу динамически устанавливать ресурс элементов на основе выбора поля со списком

Для фильтрации списка словарей не требуется понимание словаря.

Вы можете просто использовать понимание списка с условием, основанным на значении словаря:

res = [d for d in movies if d['imdb'] > 5.5]

что ваш код написан, понимание словаря создает пустой словарь в случаях, когда i['imdb'] <= 5.5.

0
задан Pravin 19 January 2019 в 06:15
поделиться

2 ответа

Вы можете использовать Style с DataTrigger, который связывается с SelectedItem из ComboBox:

<ComboBox x:Name="cmb" SelectedIndex="0" Margin="2" Width="100">
    <ComboBoxItem Tag="X">X</ComboBoxItem>
    <ComboBoxItem Tag="Y">Y</ComboBoxItem>
</ComboBox>

<Slider>
    <Slider.Style>
        <Style TargetType="Slider">
            <Setter Property="Value" Value="{Binding XValue}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding SelectedItem.Tag, ElementName=cmb}" Value="Y">
                    <Setter Property="Value" Value="{Binding YValue}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Slider.Style>
</Slider>
0
ответ дан mm8 19 January 2019 в 06:15
поделиться

Я не думаю, что вы можете изменить привязку динамически (по крайней мере, в XAML). Однако вы можете сделать следующее:

<StackPanel>
    <ComboBox SelectedIndex="{Binding SelectedIndex}" Margin="2" Width="100">
        <ComboBoxItem Tag="X">X</ComboBoxItem>
        <ComboBoxItem Tag="Y">Y</ComboBoxItem>
    </ComboBox>

    <Slider Value="{Binding SliderValue}"></Slider>
</StackPanel>

Slider теперь связано с другим свойством (SliderValue). Вот дополнительные свойства вашей модели вида:

private int _selectedIndex;
public int SelectedIndex
{
    get { return _selectedIndex; }
    set
    {
        _selectedIndex = value;
        NotifyPropertyChanged();

        if (SelectedIndex == 0)
            SliderValue = XValue;
        else if (SelectedIndex == 1)
            SliderValue = YValue;
    }
}

private int _sliderValue;
public int SliderValue
{
    get { return _sliderValue; }
    set
    {
        _sliderValue = value;
        NotifyPropertyChanged();

        if (SelectedIndex == 0)
            XValue = SliderValue;
        else if (SelectedIndex == 1)
            YValue = SliderValue;
    }
}

Идея состоит в том, что когда SelectedItem изменяется через ComboBox, Slider обновляется либо XValue, либо [118 ]. Когда значение Slider изменяется, значение XValue или YValue обновляется в зависимости от выбора ComboBox.

0
ответ дан redcurry 19 January 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: