[英]Why do Blend Interaction event triggers fire multiple times when using a Caliburn Micro Conductor.OneActive?
[英]Caliburn.Micro, multiple ActiveItem from UserControl and Conductor.OneActive
我有一個問題,但在統計數據中,我將描述您在問什么。
我使用Caliburn.Micro Framework開發應用程序。 我想做的是使多個ActiveItem
(作為UserControl
)但同時顯示一個。 就像是:
<ContentControl x:Name="ActiveItem_1"/>
<ContentControl x:Name="ActiveItem_2"/>
<ContentControl x:Name="ActiveItem_3"/>
<ContentControl x:Name="ActiveItem_4"/>
我選擇按Buttons
顯示哪個UserControl
因此,我只想同時打開一個UserControl
(當我打開一個UserControl
時,不允許打開第二個)。
我的ViewModel.cs看起來像這樣:
using Caliburn.Micro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TaskManager.ViewModels
{
class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
public void LoadLoginPage()
{
ActivateItem(new LoginViewModel());
}
public void LoadTasksPage()
{
//And here i have no idea what to do,
//how to make another UserControl to be ActiveItem
}
}
}
因此,如何將這對用戶控件命名或編碼為OneActive? 我可以使用一個UserControl並更改其大小和邊距,但是我認為這比更改UserControls更為復雜
感謝您的建議!
如果我正確理解這一點,則希望有4個內容控件,但任何時候只有一個包含一個視圖。 IE按下按鈕1,內容控件1會顯示一個視圖,但是當您單擊另一個按鈕時,內容控件1就會消失,並且會填充新按鈕的內容控件?
您不能使用ActivateItem,因為ActivateItem要求您有一個名為ActiveItem的內容控件。
您將需要執行以下操作:
Button1ViewModel ActiveItem_1 = null;
Button2ViewModel ActiveItem_2 = null;
Button3ViewModel ActiveItem_3 = null;
Button4ViewModel ActiveItem_4 = null;
public void Button1()
{
if (ActiveItem_1 == null)
ActiveItem_1 = new Button1ViewModel();
if (ActiveItem_2 != null)
{
ActiveItem_2.TryClose();
ActiveItem_2 = null;
}
if (ActiveItem_3 != null)
{
ActiveItem_3.TryClose();
ActiveItem_3 = null;
}
if (ActiveItem_4 != null)
{
ActiveItem_4.TryClose()
ActiveItem4 = null;
}
}
對其他按鈕執行類似的操作,分別為每個按鈕打開正確的視圖模型,然后關閉其他按鈕。
確實,您應該執行OneActive並只有一個名為ActiveItem的contentcontrol,並在每次單擊按鈕之一時填充該控件。 只要您不設置明確的大小,contentcontrol就會調整為您的視圖的大小(或者您可以將所有視圖設計為相同的大小)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.