簡體   English   中英

Caliburn.Micro,來自UserControl和Conductor.OneActive的多個ActiveItem

[英]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就會調整為您的視圖的大小(或者您可以將所有視圖設計為相同的大小)。

Caliburn.Micro - 如何在 WPF 視圖中顯示多個項目,來自 ViewModel 繼承:導體<object> .Collection.AllActive<div id="text_translate"><p> 我在 WPF 應用程序中使用 Caliburn.Micro 作為我的 MVVM 框架。 我試圖在一個頁面中包含幾個自定義用戶控件,這些控件會根據用戶交互動態變化。 我了解 CM 約定是 View 將綁定到 ViewModel 中的Items屬性。</p><p> 我的問題是:</p><ol><li><p> 如何在我的視圖中訪問 ViewModel 的Items集合屬性中的每個項目?</p></li><li><p> 我可以像通常使用普通 WPF 控件那樣將每個項目單獨放置在父視圖頁面上嗎?</p></li></ol><p> 視圖頁面的基本外觀如下所示。 <a href="https://i.stack.imgur.com/5vlyX.jpg" rel="nofollow noreferrer">查看頁面布局</a></p><p>基本的 ViewModel 代碼:</p><pre> public class TestViewModel: Conductor&lt;object&gt;.Collection.AllActive { public TestViewModel() { Items.Add(new CustomUC1ViewModel()); Items.Add(new CustomUC2ViewModel()); Items.Add(new CustomUC3ViewModel()); } //following logic would reassign the Items collection as required }</pre><p> 附加到Items的 ViewModel 將根據用戶與父頁面和嵌入式用戶控件的交互而動態變化。</p><p> 我希望以上內容有意義(這是我的第一篇文章)。</p></div></object>

[英]Caliburn.Micro - How to display multiple items in WPF View from ViewModel that inherits: Conductor<object>.Collection.AllActive

暫無
暫無

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

相關問題 為什么在使用Caliburn Micro Conductor.OneActive時,多次混合交互事件觸發多次觸發? Caliburn.Micro中的UserControl Caliburn.Micro從UserControl調用視圖模型 Caliburn.Micro - 如何從 class 激活項目而不是導體 Caliburn.Micro屏幕和導體生命周期文檔 Caliburn.Micro 屏幕通過導體過渡 Caliburn.Micro - 如何在 WPF 視圖中顯示多個項目,來自 ViewModel 繼承:導體<object> .Collection.AllActive<div id="text_translate"><p> 我在 WPF 應用程序中使用 Caliburn.Micro 作為我的 MVVM 框架。 我試圖在一個頁面中包含幾個自定義用戶控件,這些控件會根據用戶交互動態變化。 我了解 CM 約定是 View 將綁定到 ViewModel 中的Items屬性。</p><p> 我的問題是:</p><ol><li><p> 如何在我的視圖中訪問 ViewModel 的Items集合屬性中的每個項目?</p></li><li><p> 我可以像通常使用普通 WPF 控件那樣將每個項目單獨放置在父視圖頁面上嗎?</p></li></ol><p> 視圖頁面的基本外觀如下所示。 <a href="https://i.stack.imgur.com/5vlyX.jpg" rel="nofollow noreferrer">查看頁面布局</a></p><p>基本的 ViewModel 代碼:</p><pre> public class TestViewModel: Conductor&lt;object&gt;.Collection.AllActive { public TestViewModel() { Items.Add(new CustomUC1ViewModel()); Items.Add(new CustomUC2ViewModel()); Items.Add(new CustomUC3ViewModel()); } //following logic would reassign the Items collection as required }</pre><p> 附加到Items的 ViewModel 將根據用戶與父頁面和嵌入式用戶控件的交互而動態變化。</p><p> 我希望以上內容有意義(這是我的第一篇文章)。</p></div></object> 從MVVM和Caliburn.Micro中后面的代碼打開UserControl 使用Caliburn.Micro從ViewModel調用UserControl的方法 從用戶控件通過 ShellViewModel 進行 Caliburn.Micro 導航
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM