在咱們wpf開發中,不少人會有mvvm模式去作wpf的項目。mvvm
是否有人遇到這樣一個場景:在一個界面上,有個tabcontrol上面有4個頁籤,每一個頁籤裏面都有一個datagrid,裏面顯示的列基本同樣,綁定的數據集合都是同一個,可是有個差別,在第二個頁簽上須要第二列不顯示,第三個頁籤只顯示一個列。ide
咱們若是用的是mvvm,這個時候就會去使用數據綁定,問題在於咱們怎麼讓datagrid的下一級也就是DataGridTextColumn識別到vm,或者怎麼在模板列中識別vm,能夠綁定咱們在vm中聲明的顯示隱藏屬性。spa
這裏有個方案:代理
public class BindingProxy : Freezable { protected override Freezable CreateInstanceCore() { throw new NotImplementedException(); } public object Data { get { return (object)GetValue(DataProperty); } set { SetValue(DataProperty, value); } } // Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc... public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null)); }
很簡單的方式,定義一個空對象用來轉接vm,將vm存入Data。code
下面是用法:對象
很簡單的方式。可是這個的使用場景仍是比較多的,在不少綁定操做的時候,由於層級的關係有時候不必定能找到須要的對象,經過這個代理作一個轉接的做用。blog
有對WPF感興趣的同窗,能夠加頁面下方的qq羣,咱們一塊兒共同進步!開發