2013-07-28 63 views
2

由于某种原因,我无法让我的ListBox显示我的CollectionViewSource中的数据。下面是代码...将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> 

如果我改变ListBoxItemsSource的样子这(从ObjectDataSource获取数据而不是 CVS)它显示的数据虽然没有排序...

<ListBox x:Name="TestList" ItemsSource="{Binding Source={StaticResource AppTests}}"> 

我相信这肯定是件很简单的事情。我似乎无法让它工作!

回答

2

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

您在XAML定义referring to resource,所以你需要使用StaticResource而不是BindingObjectDataProvider就像你在后一种方法做以设置列表框的的ItemsSource。