2017-01-06 3 views
0

Я пытаюсь заполнить список со списком wpf. У меня есть две проблемы.WPF ComboBox привязка к списку <string>

  1. Это ничего
  2. не заселить Я использую аннотации данных для проверки. Он не устанавливает сообщение «Требуется» в области отображения ошибок.

Вот мой XAML для выпадающего списка:

<Label Target="{Binding ElementName=State}" Grid.Row="10" Grid.Column="0">State:</Label> 
     <ComboBox x:Name="State" Margin="10,0,0,10" Grid.Column="1" Grid.Row="10" ItemsSource="{Binding Path=States, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" Validation.Error="Validation_Error" SelectedValue="{Binding Path=FamilyMember.State}"/> 
     <TextBlock Grid.Column="2" Grid.Row="10" Style="{StaticResource TextBlockStyle}" Text="{Binding (Validation.Errors)[0].ErrorContent, ElementName=State}" Margin="10,0,0,10"/> 

Вот мое частичное ViewModel, где я заявляю и заселение моего объекта States.

Недвижимость в ViewModel

public ObservableCollection<string> States; 

Конструктора:

States = new ObservableCollection<string>(); 
      States.Add("One"); 
      States.Add("Two"); 
      States.Add("Three"); 
      States.Add("Four"); 
      States.Add("Five"); 

Вот доказательство от моего Debug, что я получаю состояния правильно с точки зрения. enter image description here

И еще одна проблема заключается в том, что моя ошибка аннотацию данных не работает Вот моя частичная Модель: enter image description here

Это работает для других областей без каких-либо проблем, как показано ниже:

enter image description here

+0

* Недвижимость в ViewModel 'общественного ObservableCollection Штаты;' * - Это не имущество. Это поле. Вы не можете привязываться к нему. Вы можете привязываться только к свойствам. Вы должны сделать это свойство, дав ему '{get; задавать; } '. Во-вторых, ваше «доказательство», что вы «правильно получаете представление о представлении», не имеет для меня никакого смысла; что вы имеете в виду, когда говорите «мнение»? –

+0

В качестве примечания установка 'UpdateSourceTrigger = PropertyChanged' и' Mode = TwoWay' в привязке ItemsSource бессмысленна, поскольку источник никогда не обновляется привязкой. – Clemens

ответ

3

Изменить это поле:

public ObservableCollection<string> States; 

к свойству:

public ObservableCollection<string> States {get; set;} 

Binding не работает на полях, даже если они являются общедоступными.

+0

Спасибо CodingYoshi, Getter и setter для Штатов зафиксировали проблему с населением. Это было очень быстро. Но вторая проблема по-прежнему сохраняется.Моя проверка аннотации данных не запускается, если она не выбрана ИЛИ даже изначально, когда мой просмотр загружен, как показано выше, в моем скриншоте –

+0

Попробуйте 'SelectedItem' не' SelectedValue' – CodingYoshi

+0

Я уже пробовал SelectedItem раньше, но не помогает. –

-1

Измените государства как полное свойство в вашей модели просмотра и добавьте путь элемента отображения в свой поле со списком для вашего xaml-файла.

вид Модель:

public ObservableCollection<string> _state = new ObservableCollection<string>(); 
public ObservableCollection<string> States 
{ 
get{return _state;} 
set {_state = value; OnPropertyChange("States");} 
} 

Если вам нужно больше разъяснений см этой страницы: https://www.codeproject.com/Articles/301678/Step-by-Step-WPF-Data-Binding-with-Comboboxes

+1

DisplayMemberPath не имеет смысла при привязке к набору строк. – Clemens

Смежные вопросы