Her bir modülün (.dll) bir ana UserControl içerdiği modül tabanlı bir uygulamam var. Modüller yalnızca gerektiğinde yüklenir ve UserControls bir MainWindow'a eklenir. Ana pencere, modüllerin UserControl'lerini yerleştirmek için AvalanDock [2.0] kullanıyor. Şimdiye kadar bu şekilde yapıyorum:Dinamik olarak yüklenen UserControl'leri AvalanDock MVVM yoluna ekle
public void DockUserControl(UserControl userControl){
var documentPane = dockingManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();
if (documentPane != null)
var layoutDocument = new LayoutDocument { Content = userControl };
documentPane.Children.Add(layoutDocument);
documentPane.SelectedContentIndex = documentPane.Children.IndexOf(layoutDocument);
}
Bu model Ben bir UserControl ViewModel bir layoutDocument bir başlığı bağlamak ister kapanış olayları vb işlemek istiyorum mesela çok kısıtlayıcı olduğunu .. Bu nedenle MVVM desenini kullanmak istiyorum.
<avalonDock:DockingManager x:Name="dockManager"
DocumentsSource="{Binding UserControls}">
<avalonDock:DockingManager.LayoutItemTemplateSelector>
...
</avalonDock:DockingManager.LayoutItemTemplateSelector>
<avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
</avalonDock:DockingManager.LayoutItemContainerStyleSelector>
...
Ancak orada modüllerin bir sürü ve ana penceresi yalnızca bazı ortak atalara sahip olduğunu bilmelidir, şu şekildedir: Tipik kullanım görünüyor. Bu nedenle, LayoutItemTemplateSelector'daki tüm UserControl'leri listeleyemiyorum. Sahip olduğum şey, bir UserControls listesi.
MVVM'yi dinamik olarak yüklenmiş UserControls ile kullanma hakkında herhangi bir fikriniz var mı? Benim durumumda
Aşağıdaki sorunun olduğunu düşünüyorum: AvalanDock, ViewModel'i temel alan görünümü seçer. Bu nedenle, tüm ViewControl'lerim için genel ViewModel kullanırsam, AvalanDoock hangi Görünümü seçeceğine karar veremezdi. Daha somut olarak kullandığınız kısımdaki problemi görüyorum. Ya da belki bir daha ipucuna ihtiyacım var. –
Dejvovo
Belki genel bir View'a sahip olabilirsiniz ve daha sonra kullanıcı kontrolünüzü bir iframe veya bunun gibi bir şey gibi koyabilirsiniz. – ganchito55