我们为什么要实际使用依赖属性?

时间:2010-10-09 08:50:51

标签: silverlight-4.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才行?

1 个答案:

答案 0 :(得分:1)

简短回答:依赖属性是包装器,它知道如何“分派更改”。

请参阅Dependency Properties Overview