Mam zestaw UserControl, które współużytkują ten sam obiekt biznesowy (ViewModel), ale tylko wyświetlaj dane z tego w inny sposób.
Wybieram aktywny UserControl przez combobox. Old UserControl I usunąć z StackPanel i dodać nowe UserControl.
var uiElement = thisObject.EditorsContainer.Children.FirstOrDefault();
if (uiElement != null)
{
thisObject.EditorsContainer.Children.Remove(uiElement);
uiElement.Cast<UserControl>().ClearValue(DataContextProperty);
}
EditorsContainer to StackPanel
Wygląda na to, że kontrolka nadrzędna odwołuje się do usuniętego elementu sterującego, ponieważ podczas edytowania wartości w aktywnej kontroli powiązanie z aktualizacjami właściwości powiązanej spowodowało usunięcie kontroli w pamięci.
Odpowiedzi:
0 dla odpowiedzi № 1Jako obejście wdrożyłem interfejsIActiveAware z właściwością IsActive, która ma wartość false, gdy zakończył się logiczny czas trwania kontroli użytkownika. W powiązanej właściwości w ViewModel sprawdzam tę właściwość.