2013-07-28 4 views
2

По какой-то причине я не могу получить свой ListBox для отображения данных из моего CollectionViewSource. Вот код ...Связывание коллекцииViewSource с ListBox

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 из ListBox выглядеть это (получение данных из ObjectDataSource и не CVS), он отображает данные, хотя и не отсортированные ...

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

Я уверен, что это должно быть что-то довольно простое. Я просто не могу заставить его работать!

ответ

2

Заменить этот <CollectionViewSource x:Key="cvs" Source="{Binding AppTests}">

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

Вы referring to resource определены в XAML, так что вы должны использовать StaticResource вместо Binding сослаться на ObjectDataProvider так же, как вы делаете в более позднем подходе установить ItemsSource вашего ListBox.

Смежные вопросы