2010-10-09 45 views
0

此代碼不起作用: -爲什麼我們應該實際使用依賴屬性?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using SilverlightPlainWCF.CustomersServiceRef; 
using System.Diagnostics; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 

namespace SilverlightPlainWCF 
{ 
    public partial class MainPage : UserControl 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 
      this.DataContext = Customers; 
      this.Loaded += new RoutedEventHandler(MainPage_Loaded); 
     } 
     public static readonly string CustomersPropertyName = "Customers"; 

     // public DependencyProperty CustomersProperty = DependencyProperty.Register(CustomersPropertyName,typeof(ObservableCollection<Customer>) 
     //            ,typeof(MainPage),new PropertyMetadata(null)); 
     private ObservableCollection<Customer> customers; 
     public ObservableCollection<Customer> Customers 
     { 
      //get { return GetValue(CustomersProperty) as ObservableCollection<Customer>; } 
      //set 
      //{ 
      // SetValue(CustomersProperty, value); 
      //} 
      get 
      { 
       return customers; 
      } 
      set 
      { 
       customers = value; 
      } 
     } 

     void MainPage_Loaded(object sender, RoutedEventArgs e) 
     { 

      CustomersServiceClient objCustomersServiceClient = new CustomersServiceClient(); 

      objCustomersServiceClient.GetAllCustomersCompleted += (s, res) => 
      { 

       if (res.Error == null) 
       { 
        Customers = res.Result; 

       } 
       else 
       { 
        MessageBox.Show(res.Error.Message); 
       } 
      }; 

      objCustomersServiceClient.GetAllCustomersAsync(); 
     } 

     private void UserControl_Loaded(object sender, RoutedEventArgs e) 
     { 

      // Do not load your data at design time. 
      // if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
      // { 
      // //Load your data here and assign the result to the CollectionViewSource. 
      // System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["Resource Key for CollectionViewSource"]; 
      // myCollectionViewSource.Source = your data 
      // } 
      // Do not load your data at design time. 
      // if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) 
      // { 
      // //Load your data here and assign the result to the CollectionViewSource. 
      // System.Windows.Data.CollectionViewSource myCollectionViewSource = (System.Windows.Data.CollectionViewSource)this.Resources["Resource Key for CollectionViewSource"]; 
      // myCollectionViewSource.Source = your data 
      // } 
     } 


     private void LayoutRoot_MouseLeave(object sender, MouseEventArgs e) 
     { 

     } 

     private void customerDataGrid_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e) 
     { 
      var Customer = Customers[e.Row.GetIndex()]; 
      Debug.WriteLine(Customer); 


     } 

     private void customerDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

     } 
    } 
} 

而如果我只是客戶的上述屬性更改爲這樣: -

public static readonly string CustomersPropertyName = "Customers"; 

     public DependencyProperty CustomersProperty = DependencyProperty.Register(CustomersPropertyName,typeof(ObservableCollection<Customer>) 
                 ,typeof(MainPage),new PropertyMetadata(null)); 
     private ObservableCollection<Customer> customers; 
     public ObservableCollection<Customer> Customers 
     { 
      get { return GetValue(CustomersProperty) as ObservableCollection<Customer>; } 
      set 
      { 
       SetValue(CustomersProperty, value); 
      } 

     } 

它的工作原理。爲什麼只有使用DependencyProperty才能填充網格?請詳細解釋我。另外,我是否必須強制使用ObservableCollection,甚至List是好的?

回答

相關問題