wpf Combobox Itemssource не привязан к шаблону данных Listbox

Пожалуйста, помогите решить проблему, указанную ниже. У меня есть поле со списком внутри таблицы данных элемента списка, чтобы я мог загружать несколько полей со списком, но тот же источник элементов

<StackPanel>
  <ListBox Width="400" Name="lstFiles" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <Grid Name="dataGrid">
          <Grid.RowDefinitions>
            <RowDefinition/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
          </Grid.ColumnDefinitions>
          <TextBox Name="dragFileName"
                   Margin="5,0,0,0"
                   Text="{Binding fileName, UpdateSourceTrigger=Default}" />
          <ComboBox Grid.Row="0"
                    Grid.Column="1"
                    Margin="5,0,0,0"
                    Name="cboDragDocType"
                    ItemsSource="{Binding dragDocType, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"  
                    Text="{Binding dragDocTypeText}"
                    IsEditable="True"
                    IsReadOnly="True" />
          <Button Name="dragDelBtn"
                  Grid.Column="2"
                  Height="20">X</Button>
        </Grid>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</StackPanel>

Данные загружаются в comboBox с помощью свойства ObservableCollection. В методе инициализации я использую метод цикла, чтобы получить несколько элементов. Сценарий проблемы: выберите элемент из раскрывающегося списка1 -> затем выберите элемент из раскрывающегося списка2 -> снова щелкните раскрывающийся список1, теперь источник элемента раскрывающегося списка1 пуст.


person user2478122    schedule 26.05.2015    source источник


Ответы (1)


У вас нет привязки к _ 1_ (или _ 2_) свойства _ 3_. Следовательно, значение не может быть сохранено (или получено).

Вам необходимо добавить свойство в свой класс, которое действует как DataContext для хранения выбранного элемента ComboBox, например:

<ComboBox Grid.Row="0"
          ...
          SelectedItem="{Binding Path=SelectedDragDocType, UpdateSourceTrigger=LostFocus}" />

В качестве примечания к IsEditable и IsReadOnly для свойств ComboBox, для которых установлено значение true, довольно ограничительно. Вы уверены, что это предполагаемое поведение?

person Kryptos    schedule 26.05.2015
comment
Спасибо за ваш ответ, но я хотел сказать, что после возврата к dropdown1 (Combobox), когда я нажимаю кнопку со стрелкой раскрывающегося списка, он не перечисляет значения, т.е. в поле со списком нет элементов. - person user2478122; 26.05.2015
comment
Каково именно ваше предполагаемое поведение? Мне кажется странным иметь привязку TwoWay к свойству ComboBox ItemsSource, поскольку таким образом редактировать коллекцию невозможно. - person Kryptos; 27.05.2015
comment
1. У меня есть общий список открытого класса DragOperation {public string fileName {get; набор; } общедоступная ObservableCollection ‹ComboBoxItem› dragDocType {получить; набор; } общедоступная строка dragDocTypeText {get; набор; }} используя этот список, я прикрепил Itemssource к combobox 2. В событии инициализации mainwindow я добавляю данные в Generic list, который является общим списком, то есть, используя цикл for, я загружаю 5 combobox 3. Во время выполнения первый раз он правильно загружает все данные в поле со списком 4. Когда я снова щелкаю Источник элемента в поле со списком пуст. - person user2478122; 27.05.2015
comment
Извините, я не понимаю. Попробуйте объяснить без кода. Возможно, с картинками (обновив свой вопрос). - person Kryptos; 27.05.2015
comment
Извините, я не знаю, как размещать изображения. Очень просто .. У меня есть поле со списком в шаблоне данных списка. Во время выполнения все выпадающие списки имеют itemssource. 1. Я выбираю элемент из первого поля со списком 2. Я выбираю элемент из второго поля со списком. 3. Когда я снова пытаюсь выбрать элемент из первого поля со списком, он пуст (т. Е. Источник элементов первого поля со списком пуст) - person user2478122; 28.05.2015