Рейтинг@Mail.ru

WPF: Изменение источника элементов при изменении свойства

Опубликовано в Полезные советы

Чтобы динамически изменять коллекцию – источник привязки, можно воспользоваться триггерами данных DataTrigger:

<Style TargetType="ComboBox" x:Key="comboSourceStyle">
  <Style.Triggers>
    <DataTrigger Binding="{Binding Speed}" Value="0">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection1}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding Speed}" Value="1">
      <Setter Property="ItemsSource" Value="{StaticResource MyCollection2}" />
    </DataTrigger>
  </Style.Triggers>
</Style>
Подробнее ...

WPF: Как использовать свойство объекта в качестве параметра конвертера IValueConverter.ConverterParameter

Опубликовано в Программирование

Допустим, у нас есть объект MyObject со свойствами MyData и MyProperty. Для его отображения в графическом пользовательском интерфейсе, построенном на XAML, мы хотим использовать эти два свойства, преобразовав MyData с помощью IValueConverter, а MyProperty использовать в качестве параметра конвертера ConverterParameter. Реально ли это?

Подробнее ...

Почему ComboBox сбрасывает выбранный элемент SelectedItem при двунаправленной привязке?

Опубликовано в Полезные советы

Почему ComboBox может сбрасывать выбранный элемент SelectedItem при двунаправленной привязке, хотя вроде бы всё сделано верно? Например, есть такая XAML разметка:

<ComboBox SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" ItemsSource="{Binding MyList, Mode=OneWay}" />

Так привязка работать не будет. А вот так будет:

<ComboBox ItemsSource="{Binding MyList, Mode=OneWay}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" />

Несмотря на практически идентичную разметку, первый кусок кода работает не так, как ожидается.

Нюанс в том, что парсер XAML-разметки разбирает код последовательно. Если сначала объявлена привязка выделенного элемента SelectedItem, а после – источник данных для ComboBox, то при загрузке окна и построении графического интерфейса GUI всегда будет выбран первый элемент (ComboBox.SelectedIndex=0).

Поэтому следует всегда объявлять сначала источник элементов списка ComboBox.ItemsSource, а потом привязку выделенного элемента ComboBox.SelectedItem. Это касается и других элементов графического интерфейса, источниками которых являются коллекции, списки или массивы.

Подробнее ...
Подписаться на этот канал RSS