2013-07-28 100 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。