Для фильтрации списка словарей не требуется понимание словаря.
Вы можете просто использовать понимание списка с условием, основанным на значении словаря:
res = [d for d in movies if d['imdb'] > 5.5]
что ваш код написан, понимание словаря создает пустой словарь в случаях, когда i['imdb'] <= 5.5
.
Вы можете использовать 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>
Я не думаю, что вы можете изменить привязку динамически (по крайней мере, в 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
.