【问题标题】:How is CollectionViewSource used in XAML?XAML 中如何使用 CollectionViewSource?
【发布时间】:2014-03-17 12:00:14
【问题描述】:

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

<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>

我已经尝试将XX.View 用作ItemsSource。我在这里做错了什么?

【问题讨论】:

    标签: .net wpf xaml binding collectionviewsource


    【解决方案1】:

    首先在您的列表框中将所有Visibility 设置为Hidden。删除它。

    第二如果在 XAML 中定义了 CollectionViewSource,则不需要绑定到 View 属性。当直接从 XAML 绑定时,WPF 在内部将 CollectionViewSource 转换为 ICollectionView(在您的情况下为 ListCollectionView)。

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

    <ListBox Name="lst" Width="130" Height="120" Panel.ZIndex="1" 
             ItemTemplate="{StaticResource MyTemplate}" 
             ItemsSource="{Binding Source={StaticResource X}}"
             KeyDown="lst_KeyDown" PreviewTextInput="lst_PreviewTextInput"/>
    

    【讨论】:

    • 这是第二个。第一件事实际上是一个特性,而不是一个错误。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 2020-06-24
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2013-09-18
    • 2017-01-23
    • 2011-03-01
    相关资源
    最近更新 更多