Почему 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 имущество.

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