2009-12-01 44 views
3

代碼創建的對象(即,C#)被用於在XAML綁定?WPF - 在XAML綁定到對象可以在代碼中創建在後面

例如:沒有創建

public class MyForm 
{ 
    private MyComplexObject complexObject; 

    public MyForm() 
    { 
     InitializeComponent(); 
    } 

    public OnButtonClick(object sender, RoutedEventArgs e) 
    { 
     complexObject = new MyComplexObject(); 
    } 
} 

complexObject直到一個按鈕被點擊。但是,一旦點擊了該按鈕,我想要一個文本框綁定到complexObject.ID開始顯示Id。

我想這樣做,在XAML,如果這是可能的。

可以這樣做嗎?如果是這樣,怎麼樣?

回答

2

一種可能是讓你的XAML綁定到一個屬性上後面的代碼。如果complexObject!= null,則該屬性的getter將返回complexObject.ID。否則,它將返回「默認」,無論是null還是0或默認值(ID的類型)。同樣地,對於屬性的setter將分配到complexObject.ID如果complexObject是,再一次,不爲空。

public int ID 
{ 
    get 
    { 
     if (complexObject != null) 
      return complexObject.ID; 
     return 0; // or null or some appropriate default 
    } 
    set 
    { 
     if (complexObject != null) 
      complexObject.ID = value; 
    } 
} 
+0

+1會建議實例包含一個MyComplexObject對象的包裝對象 - 。但是你的方式是清潔:) – kiwipom 2009-12-01 23:58:46

9

是的,可以這樣做,綁定到一個屬性,您更新所需的值。我建議你看看MVVM模式(Model-View-ViewModel),這對於構建WPF的這個很好的工作非常有用。看看這個視頻的一個不錯的概述: MVVM video

使用MMVM你會創建一個類,這將是ViewModel類。這通常會被設置爲視圖的DataContext。完成後,您可以將動態引用添加到該類的其他屬性中,例如將你的文本字段綁定到一些擁有Id和ComplexObject的屬性。如果你的ViewModel類有一個屬性ComplexObject,再次有一個屬性ID你會簡單地綁定到這樣的對象:

<TextBlock Text="{Binding ComplexObject.ID}" /> 

有了這個,你可以從鼠標點擊觸發ComplexObject的創作,您應該理想地設置爲命令綁定。還要注意的是,ViewModel類(或誰持有的把complexObject需要通知時查看該對象已設置這既可以通過使的把complexObject一個DependencyProperty或通過使類持有物業實現INotifyPropertyChanged接口完成 - 給它的PropertyChanged功能觸發更改事件我更喜歡後者

相關問題