Почему DataContext возвращает нулевое значение для элементов ListView?
Я попытался отобразить элементы комбинированного списка внутри шаблона ListViewItems, используя приведенные ниже фрагменты кода. И я пытаюсь получить текст данных комбинированного списка в загруженном событии комбинированного списка. И datacontext возвращает значение только для просматриваемых listViewItems. И он возвращает нулевое значение для выпадающего списка элементов списка.
<ListView ItemsSource="{Binding PersonsTest, Mode=OneWay}" x:Name="TieLines">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<ComboBox DataContext="{Binding Orders}" ItemsSource="{Binding Numbers}" Loaded="ComboBox_Loaded" Width="250" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
Вопросы Почему возвращается значение DataContext как ноль для элементов вне представления в ListView? Как получить контекст данных из представления ListViewItems? Или еще, если мне нужно включить какие-либо другие свойства для привязки ComboBox DataContext на уровне XAML?
1 ответ
Только из названий свойств, связанных с данными, очень вероятно, что вы используете привязку неправильно. Когда вы связываете PersonsTest
в ItemsSource
из ListView
это означает, что для каждого человека в PersonsTest
сбор контроль берет на себя ItemTemplate
и наполняет его, как будто DataContext
шаблона был конкретный человек. Допустим, мы сейчас создаем экземпляр шаблона для человека P
,
Теперь, когда вы используете {Binding Orders}
вы по сути используете p.Orders
имущество. Тем не менее, когда вы устанавливаете DataContext
из ComboBox
в p.Orders
теперь следующая привязка {Binding Numbers}
становится относительно p.Orders
также. Так {Binding Numbers}
в основном означает {Binding p.Orders.Numbers}
, Я предполагаю, что это не то, что вы хотите, так как я был бы удивлен, если Orders
будет иметь свойство с именем Numbers
,
Я ожидаю, что вы связали бы ComboBox.ItemsSource
в Orders
а затем ComboBox.ItemTemplate
и настроить его по очереди вместо установки DataContext
Но, поскольку я не знаю, какова ваша модель данных, я только догадываюсь. Ключ в том, что вам, вероятно, не нужно устанавливать ComboBox.DataContext
на всех, а вместо этого просто нужно правильно установить ItemsSource
имущество.