.net 如何在XAML中使用CollectionViewSource?

.net 如何在XAML中使用CollectionViewSource?,.net,wpf,xaml,binding,collectionviewsource,.net,Wpf,Xaml,Binding,Collectionviewsource,在我的UserControl中有以下XAML,我在列表框中看不到任何内容: <UserControl x:Class="SampleProject1.AutoCompleteTextBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xml

在我的UserControl中有以下XAML,我在列表框中看不到任何内容:

<UserControl x:Class="SampleProject1.AutoCompleteTextBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:SmartSender.NET"
         xmlns:sys="clr-namespace:System;assembly=mscorlib"
         mc:Ignorable="d" 
         d:DesignHeight="400" d:DesignWidth="600">
<UserControl.Resources>
    <x:Array Type="{x:Type sys:String}" x:Key="HTML5Tags">
        <sys:String>&lt;html&gt;</sys:String>
        <sys:String>&lt;body&gt;</sys:String>
        <sys:String>&lt;head&gt;</sys:String>
    </x:Array>
    <CollectionViewSource x:Key="X" Source="{StaticResource HTML5Tags}" />
</UserControl.Resources>
<Canvas>
    <Canvas.Resources>
        <DataTemplate x:Key="MyTemplate">
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                <Ellipse Width="7" Height="7" Fill="Blue" />
                <TextBlock Margin="6,0" FontFamily="Courier New" Height="16" 
                           Text="{TemplateBinding Content}" />
            </StackPanel>
        </DataTemplate>
    </Canvas.Resources>

    <TextBox Name="txt" Canvas.Left="0" Canvas.Top="0" KeyDown="txt_KeyDown"
             PreviewTextInput="txt_PreviewTextInput" />
    <ListBox Name="lst" Width="130" Height="120" Panel.ZIndex="1" 
             Visibility="Hidden" ItemTemplate="{StaticResource MyTemplate}" 
             ItemsSource="{StaticResource X.View}"
             KeyDown="lst_KeyDown" PreviewTextInput="lst_PreviewTextInput"/>
</Canvas>

html
身体
头


我尝试了
X
X。查看
as
itemsource
。我在这里做错了什么?

首先在列表框中将
可见性设置为
隐藏。去掉那个

Second如果CollectionViewSource是在XAML中定义的,则不需要绑定到
View
属性。直接从XAML绑定时,WPF在内部将CollectionViewSource转换为
ICollectionView
ListCollectionView

这就是在XAML中绑定的方式(请注意,您必须在绑定时设置源代码,而不是直接设置源代码):


这是第二个。第一件事实际上是一个功能,而不是一个bug。:)
<ListBox Name="lst" Width="130" Height="120" Panel.ZIndex="1" 
         ItemTemplate="{StaticResource MyTemplate}" 
         ItemsSource="{Binding Source={StaticResource X}}"
         KeyDown="lst_KeyDown" PreviewTextInput="lst_PreviewTextInput"/>