我有一個類,稱爲Model<T>
,實現IDynamicObjectProvider
幷包裝T
類型的對象,轉發到下面的值屬性訪問,而增加額外的東西(例如,Model<T>
實現INotifyPropertyChanged
而T
沒有)。如何在編寫綁定時提供供Visual Studio XAML Designer使用的自定義屬性名稱列表?
我使用這些Model<T>
對象在WPF的我DataContext
性質,主要有:
public class Person { public string Name { get; set; } }
public class EditPersonViewModel {
public Model<Person> Person { get; set; }
public ICommand SavePersonCommand { get; set; }
}
<StackPanel d:DataContext="{d:DesignInstance vm:EditPersonViewModel}">
<TextBox Text="{Binding Person.Name}" />
<Button Command="{Binding SavePersonCommand}" />
</StackPanel>
的WPF綁定引擎結合Model<Person>
動態getter和setter成功。
現在,我希望通過類型的XAML設計器中的屬性自動完成,當我編寫一個以Person.
開頭的綁定時,需要儘可能少的應用程序代碼;理想情況下,圖書館的提供者完全可以實施Model<T>
。 (我是寫圖書館的人,我希望我的客戶儘可能使用Model<T>
課程)。
這裏是我知道會的工作方式,我的反對意見:
定義一個新的類,
EditPersonViewModelDesign
,這將反映所有EditPersonViewModel
屬性,並用其作爲設計實例。public class EditPersonViewModelDesign { public Person Person { get; set; } public ICommand SavePersonCommand { get; set; } }
<StackPanel d:DataContext="{d:DesignInstance vm:EditPersonViewModelDesign}"> <TextBox Text="{Binding Person.Name}" /> <Button Command="{Binding SavePersonCommand}" /> </StackPanel>
雖然不需要的代碼不適當的量,但事實上,這個類仍然會在庫在運行時離開,除非我問人們是否添加有一個項目,構建複雜(只有這些類,或者他們添加構建變量)並不完全與我坐在一起。此外,Design和View模型類更容易分離。
縮小內部元件的數據上下文,並影響了新的設計實例給它,例如:
<StackPanel d:DataContext="{d:DesignInstance vm:EditPersonViewModel}"> <TextBox DataContext="{Binding Person}" d:DataContext="{d:DesignInstance m:Person}" Text="{Binding Name}" /> <Button Command="{Binding SavePersonCommand}" /> </StackPanel>
雖然這解決方案不需要創建新的類型,添加的XAML代碼感覺相當侵入到我。
的一件事是,動態類普遍支持是根本不可能的,作爲一個'IDynamicMetaObjectProvider'實例可以自由返回不同的信息,依靠自身的實例的狀態,也就是說,沒有任何東西可以從簡單的知道的類型推斷目的。但是我正在尋找的解決方案應該僅僅代表'T'類型的靜態類型信息。無論如何,謝謝。 :) –
誠然,智能感知仍然可以得到設計實例的元對象,但可以說,這是多麼有用將審議IDynamicObjectProvider'的'常見的使用情況。 – Marc