WPF XAML,我有一個自定義控件我已經寫了這個包裹查找。 以典型的政府風格,他們有一個查找表,用於所有可能的查找。 我的自定義控件會拋出一個彈出式覆蓋圖,要求他們從列表中的項目中進行選擇。 我的問題與從我的調用表單到我的控件屬性到我的基礎控制虛擬機的數據綁定有關。WPF自定義控件屬性沒有收到數據綁定
我打電話這樣的控制:
<Controls:LookupSelector SelectedLookupValueId="{Binding Path=DataContext.SelectedHarvestMethod, ElementName=SurveyFormWindow, Mode=TwoWay}" />
(其他垃圾取出) 在這種情況下,需要明確的DataContext因爲控制的實際的datacontext是它自己的視圖模型。 SelectedHarvestMethod是ViewModel形式的屬性。
它以「新窗體」模式工作,其中控件負責設置其自己的值(該控件包含一個按鈕,當您單擊該按鈕時,會彈出一個按鈕,並選擇所需的查找數據值) 。 正如我所說的那樣工作正常,它甚至會綁定回上面代碼中的'SelectedHarvestMethod'。我可以使用這個很好,並確信我的ViewModel始終具有分配給該屬性的選定ID。
但現在我正在執行「編輯現有表單」模式,我從數據庫加載數據並在視圖模型中設置屬性。因此,我設置了'SelectedHarvestMethod',並且該代碼正常工作(setter中的斷點),但'SelectedLookupValueId'的結果setter未被調用 - 值永遠不會通過。
「SelectedLookupValueId」是在控制的視圖模型一個DP:
public static readonly DependencyProperty SelectedLookupValueIdProperty =
DependencyProperty.Register("SelectedLookupValueId", typeof(int), typeof(LookupSelector), new UIPropertyMetadata(0));
public int SelectedLookupValueId
{
get { return (int) GetValue(SelectedLookupValueIdProperty); }
set { SetValue(SelectedLookupValueIdProperty, value); ViewModel.SetPreSelectedLookupValueId(value); }
}
有在輸出窗口或事件日誌中沒有錯誤,或寫在我的鞋的底部。 插入的調試轉換器顯示整數值被明確分配。 正如評論中提到的那樣,虛擬機當然會實現INotifyPropertyChanged,並正確地提升事件。
此外,實際的類型是'用戶控制',而不是自定義控制:它涉及到XAML。
爲什麼不調用我的控件的屬性setter?
我應該補充說我在ViewModel上實現了INotifyPropertyChanged,並在設置VM屬性時將事件返回。但是,希望這已經很明顯,因爲我表示DebugConverter正在被擊中。 – DarkwingDuck 2009-08-18 07:14:05