Почему DataContext возвращает нулевое значение для элементов ListView? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь отобразить элементы комбинированного списка внутри шаблона 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 Ответ

0 голосов
/ 12 сентября 2018

Только из названий свойств, связанных с данными, очень вероятно, что вы используете привязку неправильно. Когда вы связываете 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.

...