我知道有类似的问题,但我错了。
我有:
<Window.Resources>
<local:StudentList x:Key="StudentList" />
<local:InverseBooleanConverter x:Key="InverseBooleanConverter" />
<local:StudentAssignmentToStudentAssignmentLookup x:Key="LookupHistoryConvertor" />
<CollectionViewSource x:Key="cvsStudentList" Source="{StaticResource StudentList}" Filter="CollectionViewSource_Filter"/>
</Window.Resources>
<Window.DataContext>
<local:OCLMEditorModel/>
</Window.DataContext>
在我的标记中,我有一个DataGrid
:
<DataGrid Name="gridStudents" ItemsSource="{Binding Source={StaticResource cvsStudentList}}"
Margin="2"
Height="250"
AutoGenerateColumns="False" IsReadOnly="True">
但我不认为这是对的。我的OCLMEditorModel对象有一个名为StudentList
的公共属性。如果我理解这一点,那么目前我的窗口与OCLMEditorModel
的实例相关联。但随后的DataGrid与CollectionViewSource的 distinct 实例相关联。
所以我让自己感到困惑。感谢您的指导。
答案 0 :(得分:2)
尝试更改
<CollectionViewSource x:Key="cvsStudentList" Source="{StaticResource StudentList}" Filter="CollectionViewSource_Filter"/>
到
<CollectionViewSource x:Key="cvsStudentList" Source="{Binding StudentList}" Filter="CollectionViewSource_Filter"/>
在实例化窗口时,您确定最初将DataContext设置为OCLMEditorModel
的实例。这应该意味着您的CollectionViewSource资源应该能够通过直接绑定从Window的DataContext中获取StudentList
属性。
是的,您在xaml中所做的是将DataGrid的ItemsSource绑定到CollectionViewSource的不同实例。 但是,您还要将CollectionViewSource
个实例绑定到Window.Resources中定义的StudentList
的不同实例({{ 1}}
),我不认为这是你想要的。我上面建议的更改会使<local:StudentList x:Key="StudentList" />
绑定到CollectionViewSource
的StudentList属性。
答案 1 :(得分:1)
为什么不要绑定到StudentList
属性,例如
<DataGrid Name="gridStudents" ItemsSource="{Binding StudentList}" ... />
答案 2 :(得分:1)
您可以在viewmodel中直接定义collectionviewsource,并将collectionviewsource绑定到DataGrid ItemSource
public class StudentViewModel
{
public ObservableCollection<student> StudentList { get; set; }
public ICollectionView StudentView { get; set; }
public StudentViewModel()
{
StudentList= new ObservableCollection<student>();
StudentView = new CollectionView(StudentList);
StudentView.Filter = Filter;
StudentView.SortDescriptions.Add(new SortDescription("Name",ListSortDirection.Ascending));
}
private bool Filter(object obj)
{
return true;
}
}
<DataGrid Name="gridStudents" ItemsSource="{Binding StudentView}" ... />
答案 3 :(得分:0)
您可以按以下方式设置DataContext
...
<Window.Resources>
<local:OCLMEditorModel x:Key="MyViewModel"/>
</Window.Resources>
<DataGrid DataContext="{StaticResource MyViewModel}" Name="gridStudents" ItemsSource="{Binding Source={StaticResource cvsStudentList}}"
Margin="2"
Height="250"
AutoGenerateColumns="False" IsReadOnly="True">