Announcement

Collapse
No announcement yet.

[WPF] Cần giúp đỡ về lỗi khi binding

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] Cần giúp đỡ về lỗi khi binding

    Trong quá trình code thì mình gặp lỗi tương tự như lỗi ở đây: http://social.msdn.microsoft.com/For...g-it?forum=wpf và hiện tại vẫn chưa tìm cách giải quyết được nên nhờ mọi người nếu có ai gặp rồi thì giúp đỡ với.

    Cụ thể là mình có 2 Page là Page1 và Page2 cùng dùng chung DataContext, trong DataContext có một biến ObservableCollection<T> lst.

    Ở Page1 mình có:
    HTML Code:
    <ItemsControl ItemsSource="{Binding lst}">
    Ở page2 mình có:
    HTML Code:
    <DataGrid ItemsSource="{Binding lst}">
    Cám ơn mọi người đã đọc.


  • #2
    binding bằng code behind đi em, đặt tên cho DataGrid rồi datagrid.ItemSource = xxx.lst

    Comment


    • #3
      Originally posted by 10520413 View Post
      binding bằng code behind đi em, đặt tên cho DataGrid rồi datagrid.ItemSource = xxx.lst
      Tại vì mục đích của em là muốn 2 cái dùng chung 1 source ở 2 nơi khác nhau, chỗ này thay đổi thì chỗ kia cũng thay đổi.
      Em muốn binding two way, thay đổi bên giao diện bên page 1 thì lập thức bên page 2 phải thay đổi chứ không phải chỉ lấy source lên hiển thị

      Comment


      • #4
        Khi muốn bind 2 views vô cùng một data context source, nếu bạn có implements MVVM thì sẽ rất dễ

        Code:
        public class MainViewModel
        {
             public ObservableCollection<T> MyList
             {
                  get;set;
             }
        }
        Sau đó gắn MainViewModel vào một singleton class để các views có thể bind vào

        Code:
        public class ViewModelLocator
        {
             public MainViewModel MainViewModel
             {
                  get;set;
             }
        
             public ViewModelLocator()
             {
                   //initialize main view here
                   this.MainViewModel = new MainViewModel();
             }
        }
        Sau nữa là định nghĩa ViewModelLocator tạo ở trên trong view, thường là ở App.xaml. Nhớ include vm là namespace của ViewModelLocator class

        Code:
        <vm:ViewModelLocator x:Key="Locator>
        Đến bước này, nếu bạn đã setup mọi thứ ổn, thì binding sẽ dễ dàng như sau:

        Code:
        <ListBox ItemSource={Binding MainViewModel.MyList, Source={StaticResource Locator}} />
        <DataGrid ItemSource={Binding MainViewModel.MyList, Source={StaticResource Locator}} />
        DataGrid và ListBox sẽ dùng chung MyList như một datasource, thay đổi ở MyList sẽ thay đổi ở cả 2 view. Tất nhiên MainViewModel cần implement một MVVM toolkit nếu muốn thật sự được hỗ trợ full two-ways binding (recommend MVVM Light Toolkit)


        P/s: Do mình không có sẵn VS nên chỉ hướng dẫn chay, code có thể có chỗ không đúng, có gì bạn cứ thử rồi feedback lại, mình sẽ hướng dẫn thêm.

        Happy programming

        Comment

        LHQC

        Collapse
        Working...
        X