Silverlight 4 ComboBox - привязка к обнуляемым данным (пробовал TargetNullValue, но не работает должным образом)

(Обратите внимание - я новичок в Silverlight и ищу здесь самое простое решение, например, которое не предполагает написание / установку замены для элемента управления ComboBox!)

Эта проблема возникает в приложении Silverlight 4, в котором используется подход View Model (MVVM). У меня есть простая форма для редактирования объекта "Продукт". Продукт имеет свойство CategoryID, которое может иметь значение null (int?). ComboBox используется для просмотра и установки CategoryID - это связано с ObservableCollection of Categories. Продукт также имеет ряд ненулевых свойств, связанных с текстовыми полями.

Я хочу, чтобы пользователь видел "N/A" в ComboBox для продукта без категории, и чтобы эта опция "N/A" использовалась, чтобы установить CategoryID равным нулю. Итак, я вручную добавил объект Category с CategoryID=0 и CategoryName="N/A" в коллекцию; затем я устанавливаю TargetNullValue=0 в привязке SelectedValue ComboBox. Я думал так: когда ComboBox SelectedValue был привязан к нулевому CategoryID, он заменял бы ноль и поэтому выбирал вариант "N/A".

При редактировании продукта с ненулевым CategoryID все работает. Однако при обнаружении нулевого CategoryID возникают две проблемы:

  1. В ComboBox не выбрана никакая опция (пусто)

  2. С этого момента привязка ComboBox кажется нарушенной - любой продукт, который я впоследствии редактирую (в том числе с ненулевым CategoryID), не имеет ничего выбранного в ComboBox (он все еще заполнен всеми категориями - просто нет выбранного элемента).

Я видел сообщения о проблеме № 2 ( здесь, здесь), но у меня сложилось впечатление, что № 1 должен был работать.

Чего мне не хватает, чтобы выбрать опцию "N/A"?

XAML для ComboBox:

<ComboBox x:Name="cboCategory" ItemsSource="{Binding colCategories, Mode=OneWay}" SelectedValuePath="CategoryID" DisplayMemberPath="CategoryName" SelectedValue="{Binding CurrentProduct.CategoryID, Mode=TwoWay, TargetNullValue=0}" Height="24" Width="344"></ComboBox>

1 ответ

Решение

В итоге я использовал конвертер, который преобразует значение Null в связанном объекте в ноль в ComboBox, а затем снова обратно... как упомянуто здесь http://forums.silverlight.net/forums/t/195627.aspx

Другие вопросы по тегам