簡體   English   中英

將WPF控件與自定義類型的屬性綁定

[英]Bind WPF control with property of custom type

我正在嘗試將Label的“ Content”屬性綁定到我擁有的某些自定義類型的屬性; 不幸的是,我沒有弄清楚該怎么做,這就是為什么我在這里:)

假設我具有以下類型(可以與包含Label的WPF窗口位於同一命名空間中,也可以位於其他命名空間中):

namespace MyNS
{
    public class Person
    {
        private int age = 0;

        public int Age
        {
            get { return age; }
        }

        public void GetOlder
        {
            age++;
        }
    }
}
  1. 如何將我的標簽綁定到“年齡”屬性?

  2. 在運行時,我將創建“ Person”的實例; 我想確保我的Label綁定到正確的實例; 即如果我打電話:

     Person SomePerson = new Person(); SomePerson.GetOlder(); 

    我希望我的標簽具有“ SomePerson”的“ Age”屬性的新值。

  3. 如果我在其他線程(無論是使用Dispatcher線程還是BackgroundWorker)中調用“ GetOlder”怎么辦? 我還會獲得“年齡”的最新值嗎? 還是我還必須照顧一些其他事情才能使這種情況成為可能?

提前致謝,

藍天

事實證明這是一件簡單的事情,我想知道為什么沒人回答它:)無論如何,這是答案:

  1. 首先,我們需要像這樣創建Person類:

     using System.ComponentModel; namespace MyNS { public class Person : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private int age = 0; public int Age { get { return age; } set { age = value; OnPropertyChanged("Age"); } } protected void OnPropertyChanged(string PropertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(PropertyName)); } } public void GetOlder { Age++; } } } 
  2. 然后,將WPF控件綁定到Person.Age屬性,如下所示:

     using System.Windows.Data; //... Person p = new Person(); Binding ageBinding = new Binding("Age"); ageBinding.Source = p; MyWpfLabelControl.SetBinding(Label.ContentProperty, ageBinding); 

    現在,只要調用p.GetOlder()MyWpfLabelControl.Content就會更改為新的p.Age值。

  3. 在多線程中,故事沒有什么不同。 在另一個線程中調用p.GetOlder()時,其工作方式相同:

     new Thread( new ThreadStart( delegate() { p.GetOlder(); } )).Start(); 

希望這可以幫助。

藍天

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM