bindings,datacontext,collectionviewsource

时间:2013-10-21 23:50:41

标签: c# wpf data-binding collectionviewsource

我有一个自定义对象,它有一些属性和ObservableCollection

我遇到的问题是让他们玩得很好。我似乎想要CollectionViewSource进行过滤,但我无法弄清楚它是如何应用的,这样我就可以在代码端运行过滤器了。

我还没有找到这样一个很好的绑定示例,它考虑了多个事物(主要对象上的proeprties,带过滤器的集合)

class Student
{
    public string Name { get; set; }
    public DateTime DOB { get; set; }
    public ObservableCollection<ClassRoom> Classes { get; set; }

    public Student()
    {
        this.Classes = new ObservableCollection<ClassRoom>();
    }
}

class ClassRoom
{
    public string Name { get; set; }
    public int Room { get; set; }
}

使用它,我在main.cs

中这样做
var student = new Student { Name = "Justin", DOB = new DateTime(1983, 6, 15) };
student.Classes.Add(new ClassRoom { Name = "math", Room = 102});
student.Classes.Add(new ClassRoom { Name = "english", Room = 119 });
this.DataContext = student;

所以我可以在xaml中执行此操作

<TextBlock Grid.Row="0" Grid.Column="0">
        <Run Text="Name: "/>
        <Run Text="{Binding Name}"/>
    </TextBlock>
    <TextBlock Grid.Row="0" Grid.Column="1">
        <Run Text="DOB: "/>
        <Run Text="{Binding Name}"/>
    </TextBlock>
    <DataGrid Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" 
        ItemsSource="{Binding Classes}" AutoGenerateColumns="True"></DataGrid>

我真的只是想针对Classes属性创建CVS,这样我就可以将CSV分配给DataGrid并处理仅Binding Room而不是Binding Classes.Room的自定义列绑定}

至少我怀疑,基本上问题是我找不到任何关于将OC与其他数据混合的示例/教程。

1 个答案:

答案 0 :(得分:0)

为简短起见,CollectionViewSource允许您在源上拥有一个“虚拟视图”,允许您在“视图”中对数据进行分组或排序,同时源仍保持不变。

知道如何处理这个问题的wpf中的控件不使用source而是绑定到视图,因此当你在CollectionViewSource对象中进行排序时,控件会跟随你,并按照你想要的方式更改它显示的内容。

虽然由于您没有发布大量代码并且没有指明任何确切的问题,我很乐意在您提出问题时广泛回答您。

以下链接可帮助您了解wpf:

中的分组,排序和过滤

http://msdn.microsoft.com/en-us/library/ff407126.aspx

http://wpftutorial.net/DataViews.html

检查出来,亲自试试。一旦你被困在某个地方,谷歌似乎没有帮助你任何进一步随意在这里用代码示例发布一个问题。