簡體   English   中英

包含兩個Caliburn.Micro視圖的對話視圖?

[英]Dialog view containing two Caliburn.Micro views?

我有一個Windows WPF應用程序,我正在使用Caliburn.Micro。 主窗口視圖/ viewmodel由Caliburn.Micro處理。 其中一個按鈕彈出一個新的對話窗口,該窗口使用不同的視圖模型。

在這個對話框中,我有一個容器(列表框和一些過濾器控件),我想將其作為一個可重用的控件,以便我可以將它包含在其他對話框中。 為此,我從對話框的視圖中提取並viewmodel相關代碼並創建了一個新視圖和viewmodel。 這一切看起來都不錯。

問題是,現在回到對話框中我有一個帶有大空空間的dockpanel,我需要可重用的控件。

從對話框viewmodel OnInitalize()我可以創建可重用的控件視圖模型,但我不知道如何將它的視圖放入對話框視圖的dockpanel。

要從主窗口viewmodel創建對話框,我使用WindowManager()。ShowDialog()顯示對話框的viewmodel,Caliburn.Micro負責設置視圖。 有沒有一種方法可以在對話框的XAML中指定我想為可重用控件嵌入視圖並讓Caliburn創建適當的視圖/視圖模型?

或者我是以錯誤的方式去做的?

如果對話框視圖模型上有一個屬性是另一個視圖模型類型,並且您將ContentControl添加到對話框視圖中,該視圖的名稱與此屬性相同,則Caliburn.Micro將自動注入與您的屬性視圖對應的視圖將模型類型放入ContentControl占位符,並自動將該視圖模型類型綁定到視圖中。 你是這個意思嗎? 就像是:

// Dialog View Model
private MyReusableControlViewModel myReuseableControl;
public MyReusableControlViewModel MyReuseableControl
{ 
   get { return this.myReuseableControl; }
   set { this.myReuseableControl = value;  NotifyOfPropertyChanged(...); }
}

// Dialog View Model Constructor
public DialogViewModel()
{
  this.MyReuseableControl = new MyReusableControlViewModel();
}

// Dialog View
<DockPanel>
  ...
  <ContentControl x:Name="MyReusableControl" />
</DockPanel>

當然,理想情況下,您希望注入對話框視圖模型的任何依賴項(在本例中為MyReusableControlViewModel),並在對話框視圖模型中處理抽象,而不是具體類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM