У меня есть поле со списком, обозначенное следующим образом.Как связать поле со списком с другим значением, чем фактическое, смещая его?
<ComboBox SelectedIndex="{Binding Path=Bonkey}">
<ComboBoxItem Content="Monkey" />
<ComboBoxItem Content="Donkey" />
</ComboBox>
Я привязка к объекту, который имеет Bonkey типов полей в виде целого числа, в соответствии с приведенной ниже декларацией.
class Thingy
{
public int Bonkey {get; set; }
...
}
Несмотря на то, что он отлично работает и, как предполагается, существует программно-техническая проблема, которая меня поддерживает ночью. Индексы, сгенерированные в ручном знаке вверх, равны 0 и 1. Однако я знаю, что значения целых чисел будут равны 1 и 2. (Ie Monkey индексируется 0, когда относится к элементу со списком, но это фактическое значение в объект, используемый в качестве источника данных равен 1. Аналогично, обезьяны имеет индекс 1 в пункты выпадающего списка, но она соответствует 2 в объекте.)
Мой промежуточное решение было сбить 1 в конструктор непосредственно перед установление контекста данных, за которым следует удар по 1 при отображении представления. Он работает, но я не могу гордиться, так сказать.
public SomeDialog(Thingy thingy)
{
InitializeComponent();
thingy.Bonkey--;
DataContext = thingy;
}
...
private void Cancel_Click(object sender, RoutedEventArgs eventArgs)
{
DialogResult = false;
DataContext.Bonkey++;
Close();
}
...
private void Submit_Click(object sender, RoutedEventArgs eventArgs)
{
DataContext.Bonkey++;
...
}
Как я могу это сделать больше, ну ... неудобно?
- Я не смог найти никаких атрибутов, чтобы явно устанавливать индексы элементов в поле со списком.
- Я пробовал использовать конвертеры, но каким-то образом я либо получил пустые вещи в поле со списком (без предварительного выбора), либо какое-то странное сообщение об ошибке, сообщающее мне, что я сделал boo-boo (и так как я даже не был уверен если это хороший подход, я отпустил его).
- Googling дал кучу результатов, ни одна из которых не дала мне ясности относительно того, как компенсировать ценность (хотя, честно говоря, я подозреваю, что я могу использовать слишком странные ключевые слова, потому что кажется, что такая проблема должна " ранее обсуждались).
Создайте пользовательский 'IValueConverter', который бы смещал значение в обоих направлениях по статическому значению, например, передан в' КонвертерParameter' – dkozl
@dkozl Итак, в принципе, опция №2? Наверное, я снова могу взломать его. Может быть, мои мозги устают, а мой дух уходит слишком рано. Возможно, вы захотите опубликовать это как ответ, чтобы я мог принять его в качестве ответа, если я получу его для работы. –
Он должен отлично работать с преобразователем. Возможно, если вы разместите свой конвертер, мы сможем рассказать вам, что не так. – dkozl