Когда большой DataTemplate ListView содержит маленький ListView, SelectedItem малого ListView сбрасывается.
Я создал пример приложения, которое выбирает страну каждого человека из трех вариантов.Я выбрал «Индия» в последнем небольшом элементе ListView (индекс: 999) из кода позади.
Но когда я прокручиваю вниз, ничего не выбирается, и журнал отладки выглядит как показано ниже.
[Журнал отладки]
Добавлено: Индия, удалено:
Добавлено :, Удалено: Индия
[MainPage.xaml]
<ListView ItemsSource="{x:Bind People}" SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Person">
<StackPanel BorderBrush="Black" BorderThickness="0,0,0,1">
<TextBlock Text="{x:Bind Country, Mode=OneWay}"/>
<ListView x:Name="CountryList"
ItemsSource="{x:Bind Countries, Mode=OneWay}"
SelectedItem="{x:Bind Country, Mode=TwoWay}"
SelectionChanged="CountryList_SelectionChanged">
</ListView>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
[MainPage.xaml.cs]
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
GenerateSampleData();
}
private void GenerateSampleData()
{
for (int i = 0; i < 1000; i++)
{
People.Add(new Person
{
Countries = new List<string> { "China", "India", "USA" },
});
}
People[999].Country = "India";
}
private void CountryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
StringBuilder sb = new StringBuilder("Added:");
foreach (var added in e.AddedItems)
{
if (added is string country)
{
sb.Append($" {country,-5}");
}
}
sb.Append(", Removed:");
foreach (var removed in e.RemovedItems)
{
if (removed is string country)
{
sb.Append($" {country,-5}");
}
}
Debug.WriteLine(sb);
}
Полный источник приведен ниже.
https://github.com/tokane888/ListViewQuestion
И я не уверен, что это связано, но какой-то маленький ListView показан серым, как показано ниже.
(Я не трогал этот маленький ListView даже из-за кода или вручную.)![Gray ListView](https://i.stack.imgur.com/Ee0t2.png)