将CollectionViewSource绑定到ListBox

时间:2013-07-28 19:56:54

标签: c# .net wpf xaml data-binding

出于某种原因,我无法让我的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" }
        };
    }
}

......现在是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>

如果我将ItemsSource的{​​{1}}更改为如此(从ListBox获取数据而不是 CVS),则会显示数据,但是没有排序...

ObjectDataSource

我确信这一定非常简单。我似乎无法让它发挥作用!

1 个答案:

答案 0 :(得分:4)

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

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

您在XAML中定义referring to resource,因此您需要使用StaticResource代替Binding来引用ObjectDataProvider,就像您在以后设置ItemsSource的方法中所做的那样你的listBox。