我有一个WinUI 3项目使用模板工作室搭建。我有一个用枚举填充的列表视图。我想在另一个列表中显示所选项目,但绑定不起作用。
使用Enum填充,这意味着我使用具有枚举值和枚举描述的<key,value>对,并用作ItemsSource。选择模式多重激活。
public IEnumerable<KeyValuePair<string, string>> ValidationFlagsList => EnumExtensions.GetAllValuesAndDescriptions<ValidationFlag>();
//...
public static IEnumerable<KeyValuePair<string, string>> GetAllValuesAndDescriptions<TEnum>() where TEnum : struct, IConvertible, IComparable, IFormattable
{
return typeof(TEnum).IsEnum ? (from e in Enum.GetValues(typeof(TEnum)).Cast<Enum>() select new KeyValuePair<string, string>(e.ToString(), e.GetDescription())) : throw new ArgumentException("TEnum must be an Enumeration type");
}
<ListView
x:Name="FlagsListView"
SelectionMode="Multiple"
ItemsSource="{x:Bind ViewModel.ValidationFlagsList, Mode=OneTime}"
SelectedValuePath="Key"
DisplayMemberPath="Value">
</ListView>
在xaml的另一部分中,我想显示所选的项目。我尝试了两种变体:
1.
<ListView ItemsSource="{Binding SelectedItems, ElementName=FlagsListView, Mode=OneWay}"/>
2.
<StackPanel DataContext="{Binding SelectedItems, ElementName=FlagsListView}">
<TextBlock Text="{Binding}"/>
</StackPanel>
UI上没有显示任何内容。如何正确绑定?
是因为IEnumerable是静态的,需要ObservableCollection吗?但是xamlListView应该给予我一些简单的绑定。文档指向此Data binding。我读到了关于创建一个具有IsSelected属性的类的内容,但我只需要一个只读列表,最好只在xaml中添加一些东西。
1条答案
按热度按时间fkaflof61#
ListView确实有一个SelectedItems属性,但它只是一个普通属性,而不是
DependencyProperty
。不幸的是,你不能使用它与绑定。你可以做的是创建一个自定义的
ListView
:ListViewEx.cs
然后像这样使用它: