在我們wpf開發中,很多人會有mvvm模式去做wpf的項目。 是否有人遇到這樣一個場景:在一個界面上,有個tabcontrol上面有4個頁簽,每個頁簽裡面都有一個datagrid,裡面顯示的列基本一樣,綁定的數據集合都是同一個,但是有個差異,在第二個頁簽上需要第二列不顯示,第三個頁簽只顯示一個列。 ...
在我們wpf開發中,很多人會有mvvm模式去做wpf的項目。
是否有人遇到這樣一個場景:在一個界面上,有個tabcontrol上面有4個頁簽,每個頁簽裡面都有一個datagrid,裡面顯示的列基本一樣,綁定的數據集合都是同一個,但是有個差異,在第二個頁簽上需要第二列不顯示,第三個頁簽只顯示一個列。
我們如果用的是mvvm,這個時候就會去使用數據綁定,問題在於我們怎麼讓datagrid的下一級也就是DataGridTextColumn識別到vm,或者怎麼在模板列中識別vm,可以綁定我們在vm中聲明的顯示隱藏屬性。
這裡有個方案:
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。
下麵是用法:
很簡單的方式。但是這個的使用場景還是比較多的,在很多綁定操作的時候,因為層級的關係有時候不一定能找到需要的對象,通過這個代理做一個轉接的作用。
有對WPF感興趣的同學,可以加頁面下方的qq群,我們一起共同進步!