将 CollectionViewSource 绑定到 ListBox

Rem*_*tec 3 .net c# data-binding wpf xaml

出于某种原因,我无法ListBox从我的CollectionViewSource. 这是代码...

public class AppTest
{
    public int Priority { get; set; }
    public string TestName { get; set; }
}

public class AppTestProvider
{
    public List<AppTest> GetAppTests()
    {
        return new List<AppTest>()
        {
            new AppTest() { Priority=1, TestName = "Application Setup" },
            new AppTest() { Priority=2, TestName = "File System Permissions" }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

......现在Xaml......

<Window.Resources>
    <ObjectDataProvider x:Key="AppTests" ObjectType="{x:Type Application:AppTestProvider}" MethodName="GetAppTests" />
    <CollectionViewSource x:Key="cvs" Source="{Binding AppTests}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Priority" Direction="Ascending" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</Window.Resources>

<Grid>
    <ListBox x:Name="TestList" ItemsSource="{Binding Source={StaticResource cvs}}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding TestName}" />                    
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

如果我改变ItemsSourceListBox,看起来像这样(得到从数据ObjectDataSource没有在CVS),它显示的数据虽然没有排序...

<ListBox x:Name="TestList" ItemsSource="{Binding Source={StaticResource AppTests}}">
Run Code Online (Sandbox Code Playgroud)

我相信这一定是非常简单的事情。我似乎无法让它工作!

Roh*_*ats 5

替换这个 <CollectionViewSource x:Key="cvs" Source="{Binding AppTests}">

<CollectionViewSource x:Key="cvs" Source="{StaticResource AppTests}">.

您是referring to resource在 XAML中定义的,因此您需要使用StaticResource而不是Binding引用,ObjectDataProvider就像您在稍后的方法中设置 listBox 的 ItemsSource 一样。