Kompozit görünüm - Görünüm zaten bölge hatası var

WPF/Prism 4/AvalonDoc uygulaması üzerinde çalışıyorum.

Görüşlerimden biri çok karmaşık ve bir ViewModel devasa ve yönetilemez hale geliyor. Bu yüzden kendi ViewModels ile daha küçük görünümlere ayırmaya karar verdim.

ViewManagement.RegisterViewWithRegion yöntemini "master" ViewModel yapıcısından kullanarak bölgeye bir görünüm yerleştirdim ve alt görünümü bu bölgeye yükledim.

Bu, yalnızca bir görünümün yalnızca yüklenmesinin beklendiği gibi çalışır. Ama o ekranın ikinci örneğini açtığımda (bu, Documentonent'in DocumentPane'e DocumentContent olarak yüklenir) "Görünüm zaten bölgede var" hatası alıyorum.

Mümkünse bölgeye benzersiz bir isim vermekten kaçınmak istiyorum. "Ana" görünümün belirli örneğine alt görünüm eklediğimi belirtmenin bir yolu var mı? Bunun nasıl yapıldığına dair bir tavsiye var mı?

2

2 cevap

MEF kullanıyorsanız ve görüşünüz Tekil yani.

[PartCreationPolicy(CreationPolicy.Shared)]

ve INavigationAware kodunuz yanlış döndü

public override bool IsNavigationTarget(NavigationContext navigationContext)

{return false;}

Bu hatayı alacaksınız.

Change [PartCreationPolicy(CreationPolicy.Shared)] to [PartCreationPolicy(CreationPolicy.NonShared)]

ve sen bitti.

1
katma

Aynı isimde birden fazla bölgeye sahip olamayacağından korkuyorum. Görünüm modeli karmaşıklaştığı zaman görüşleri bölmemeyi tercih ederim. Görünüm modelini birkaç özel görünüm modeline ayırabilirsiniz.

Bir örnek. Bir kullanıcı yönetimin var. Bir görünüm modeli tüm kullanıcıların listesidir. Bu liste kullanıcı görünümü modellerini içerir. Ve her bir kullanıcı görüntüleme modeli, bir kullanıcı hakları görüntüleme modelinin bir örneğini de içerir; kendisi, yine yalnızca bir kullanıcı hakkını temsil eden görünüm modellerinin bir listesidir. Böylece, özel bir kullanıcı hakkının nasıl sunulduğuna ilişkin mantık, "ana" kullanıcı listesi görünümü modeline değil, muhabir görüş modeline girer. Böylece kaygılarınızı farklı görünüm modellerine ayırabilirsiniz.

Bu görüş modellerine bağlanma, yalnızca bir bakış modeline sahip olmak kadar basittir. Sadece yol biraz daha uzuyor. Veri içeriği, yukarıdaki örnekte bulunan kullanıcı listesi görünümü modeliyse, kullanıcı haklarının listesini almak için CurrentUserVM.UserRightsVM gibi bir bağlanma yoluna sahip olabilirsiniz.

0
katma