綁定到的DependencyProperty我有兩個不同的用戶控件形式 - 一個包含一個Telerik的RadGridView,另一個是包含Telerik的的DataForm。在用戶控件
網格用戶控件綁定到包括暴露的網格綁定到項目集合的屬性一個ViewModel。
當我在窗體綁定到財產,一切工作正常。
但我需要訪問窗體控件中的其他信息,它們不屬於網格控件的視圖模型。
所以我想我會一個屬性添加到窗體用戶控件,並將其綁定到項目集合:
<local:FormControl x:Name="formControl"
ItemsSource="{Binding items}"
/>
在窗體的代碼隱藏,我添加了一個普通財產:
private object itemsSource;
public object ItemsSource
{
get { return this.itemsSource; }
set { this.itemsSource = value; }
}
這當然不起作用。我遇到了必須使用DependencyProperty的錯誤。我認爲這是令人放心的 - 頁面實際上是試圖綁定到我認爲應該的屬性。
所以我轉換這對DependencyProperty:
public static DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(object), typeof(FormControl));
public object ItemsSource
{
get { return GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
這編譯和無差錯運行。當然,除了該控件的視圖模型沒有任何項目。所以接下來是試圖ItemsSource屬性傳遞到表單控件的視圖模型:
public FormControl()
{
InitializeComponent();
this.DataContext = new FormControlVM(this.ItemsSource);
...
這沒有奏效。當FormControl()被構造時ItemsSource爲null。所以我向viewmodel添加了一個setItemsSource()方法,並在ItemsSource屬性的set函數中調用它。這也沒有奏效。 xaml顯然是綁定到屬性的,但似乎沒有調用屬性的set函數。
所以我決定聽ValueChanged事件,上的DependencyProperty:
public FormControl()
{
InitializeComponent();
this.DataContext = new FormControlVM();
DependencyPropertyDescriptor prop =
DependencyPropertyDescriptor.FromProperty(FormControl.ItemsSourceProperty, this.GetType());
prop.AddValueChanged(this, delegate
{
FormControlVM formControlVM = (FormControlVM)this.DataContext;
formControlVM.setItemsSource(this.ItemsSource);
});
...
,它仍然無法正常工作。 ValueChanged委託似乎永遠不會被調用。
這似乎是它應該是一個簡單的事情,但我沒能找到上線的例子,我嘗試了各種組合我所能想象的。
任何想法,我應該怎麼處理呢?在結合============
威爾
============附加信息被要求對不綁定的XAML信息。
如果我把這個包含用戶控制頁面,結合用戶控件的頁面視圖模型:
<local:FormControl x:Name="formControl"
Grid.Column="2"
DataContext="{Binding}"
/>
然後這個用戶控件,綁定用戶控件到窗體itemsCollection頁面的viewmodel:
<telerik:RadDataForm
ItemsSource="{Binding itemsCollection}"
Header="View Item:"
CommandButtonsVisibility="None"
AutoGenerateFields="False"
/>
然後一切正常。
但問題是,我無法將用戶控件綁定到頁面的視圖模型。我需要讓用戶控件的視圖模型公開該頁面的視圖模型不應該看到的信息。
而我不能讓用戶控件中的表單到達用戶控件的外部,並綁定到頁面viewmodel上的屬性。這是對封裝的違反,這將使得使用不同頁面上的用戶控件變得更加複雜,並且嚴重限制了我將來如何修改控件的內部。 (頁面不應該知道用戶控件內的任何控件,用戶控件中的控件不應該知道頁面的任何內容。)
當我在頁面中包含用戶控件時,我想綁定用戶控制到頁面視圖模型的屬性,並且我希望用戶控件中的任何控件綁定到用戶控件的屬性或用戶控件的視圖模型的屬性。
我認爲這是一個相當常見的事件。但是我還沒有找到任何可以做到的例子。
Yeesh。雖然很高興知道你是如何到達兔子洞的底部的,但我無法弄清楚爲什麼*你失敗了。你想在你的FormControl *裏面完成什麼,你需要給它添加ItemsSource屬性,以及你想要在你的UserControl中使用該對象做什麼? – Will 2012-02-28 18:17:58
FormControl包含一個窗體,並且該窗體具有一個ItemsSource屬性。我想要宣傳該屬性,以便當我將FormControl放在頁面上時,我綁定到FormControl上的屬性,而不是伸入控件並綁定到其中的某個東西。 (得墨忒耳法)。 – 2012-02-28 19:12:01
你試圖將所有東西綁定在一起,綁定不起作用但是我不認爲有人可以說,因爲你添加了所有的東西,除了你希望工作的綁定沒有的xaml。 – Will 2012-02-28 19:13:16