[C#.NET][WPF] 控制項的資料繫結(六) - CollectionViewSource

[WPF] 控制項的資料繫結(六)–CollectionViewSource

還是繼延用上篇例子,定義一下類別,本篇則增加 LoginTime 欄位

 

private BindingList<Member> _Group = null;
public BindingList<Member> Group
{
    get
    {
        if (this._Group == null)
        {
            this._Group = new BindingList<Member>();
            this._Group.Add(new Member { ID = 1, Name = "余小章", Age = 12, Phone = "0806449", LoginTime = new DateTime(2010, 1, 2) });
            this._Group.Add(new Member { ID = 2, Name = "gy", Age = 15, Phone = "2", LoginTime = new DateTime(2012, 3, 3) });
            this._Group.Add(new Member { ID = 3, Name = "Raymond", Age = 13, Phone = "3", LoginTime = new DateTime(2009, 11, 22) });
            this._Group.Add(new Member { ID = 4, Name = "Kobe", Age = 32, Phone = "43", LoginTime = new DateTime(2013, 8, 23) });
        }
        return _Group;
    }
    set
    {
        _Group = value;
        OnPropertyChanged("Group");
    }
}

VS2010的資料來源拖拉物件進來

image

 

image

 

完成後就會看到以下的架構

image

 

 

資料來源裡的結構VS2010預設已經綁定了一些控制項,你可以自行變更控制項

imageimage

 

 

 

 

然後把想要呈現的資料拖拉到設計版面裡

image

來觀察一下VS2010幫我們產生了什麼XAML結構

1.很明顯的,以下是拖拉資料來源產生出來的東西

<Window.Resources>
    <CollectionViewSource x:Key="memberListViewSource" d:DesignSource="{d:DesignInstance local:MemberList, CreateList=True}" />
    <CollectionViewSource x:Key="memberListGroupViewSource" Source="{Binding Path=Group, Source={StaticResource memberListViewSource}}" />
</Window.Resources>

2.然後就是DataGrid的繫結,我們可以觀察到這個DataGrid的繫結來源是StaticResource memberListGroupViewSource

<Grid DataContext="{StaticResource memberListGroupViewSource}">
    <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Height="200" HorizontalAlignment="Left" ItemsSource="{Binding}" Margin="5,12,0,0" Name="groupDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" VerticalAlignment="Top" Width="400">…以下省略

image

 


還沒完!!!上面的工作只是做繫結而已並還沒有丟資料,類別也還沒初始化

重新規劃一下UI

image

然後我在Loaded事件裡加入以下程式碼,主要目的就是把資料丟回 CollectionViewSource ,因為dataGrid綁定的物件是 CollectionViewSource ,_MemberList 就是 CollectionViewSource 的來源,_MemberList 一變更就應該要通知UI更新資料。

 

CollectionViewSource _Source = null;
MemberList _MemberList = new MemberList();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    this._Source = this.FindResource("memberListGroupViewSource") as CollectionViewSource;
    this._Source.Source = this._MemberList.Group;
}

 

為了測試則將加入一筆新資料

 

private void btnAdd_Click(object sender, RoutedEventArgs e)
{
    Member member = new Member();
    member.Age = int.Parse(this.txtAge.Text);
    member.ID = int.Parse(this.txtID.Text);
    member.Name = this.txtName.Text;
    member.Phone = this.txtPhone.Text;
    member.LoginTime = (DateTime)this.dateLoginTime.SelectedDate;
    this._MemberList.Group.Add(member);
}

 

 

執行結果如下:資料來源新增資料,UI也跟著更新了。

image

 

 


飯粒下載:WpfBindingDemo.zip

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo