我有我的WPF控件設置,以便它只有下面的代碼:如何綁定到用戶控件的父窗口IsActive屬性
InitializeComponent();
DataContext = model;
不過,我現在碰到一個問題,我不希望某些行動在窗口不活動時發生,因此我在ViewModel上創建了一個IsActive標誌,但由於我的代碼來自用戶控件,而不是窗口,所以我無法在用戶控件中沒有代碼的情況下執行此操作。這是我能做的最好的,還是有一個真正的MVVM方法來這
試過這個,但遇到了一個運行時錯誤,說IsActiveProperty
不能被數據綁定。
Loaded += (sender, args) =>
{
var parentWindow = Window.GetWindow(this);
if (parentWindow == null)
return;
var isActiveWindowBinding = new Binding {Source = model.IsActive};
parentWindow.SetBinding(Window.IsActiveProperty, isActiveWindowBinding);
};
所以,我不這樣做:
Loaded += (sender, args) =>
{
var parentWindow = Window.GetWindow(this);
if (parentWindow == null)
return;
parentWindow.Activated += (o, eventArgs) => model.IsActive = true;
parentWindow.Deactivated += (o, eventArgs) => model.IsActive = false;
};
最大的問題是,已經完成我不能讓父窗口,直到控制負載和數據綁定?我是否需要創建一個附加的行爲,這對於簡單的綁定來說是相當多的痛苦。
你有沒有試圖改變結合「變種isActiveWindowBinding =新的綁定(‘IsActive’){源=模型。 IsActive,UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged};'你的IsActive **屬性**實現了一個PropertyChanged方法 –
@Bob我會試一下,但它仍然會污染什麼可能是這樣一個乾淨的代碼隱藏,這是我的問題的主要部分 –