WPF & SimpleMVVM: привязка новой модели представления для просмотра
Обратите внимание, что этот вопрос относится только к SimpleMVVM и использованию его ViewModelLocator.
У меня есть настройки вида так:
<UserControl x:Class="CallTracker.WPF.Views.CallUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
DataContext="{Binding Source={StaticResource Locator}, Path=CallViewModel}">
<StackPanel>
<TextBlock Text="{Binding GreetingText}" />
</StackPanel>
</UserControl>
И мой локатор определяет CallViewModel как:
// Create CallViewModel on demand
public CallViewModel CallViewModel
{
get
{
return _CallViewModel;
}
set
{
if (_CallViewModel != value)
{
_CallViewModel = value;
}
}
}
private CallViewModel _CallViewModel;
Во время выполнения я пытаюсь создать новый CallUserControl для использования, но, используя Snoops, я вижу, что текст данных CallUserControl не привязан к модели представления (datacontext в Snoops имеет значение null).
Переходя к коду, я вижу, что CallViewModel создается и присваивается объекту в локаторе, но текст данных UserControl не привязывается к этому вновь созданному объекту.
Я создаю новую CallViewModel как таковую:
private void NewCall()
{
MessageBox.Show("NewCallCommand executed.");
// Only start a new call if one doesn't currently exist
if((App.Current.Resources["Locator"] as ViewModelLocator).CallViewModel == null)
{
CurrentCallViewModel = new CallViewModel();
}
}
....
/// <summary>
/// Current MainContentViewModel
/// </summary>
public CallViewModel CurrentCallViewModel
{
get
{
//Visibility _visible = (new ViewModelLocator()).CallViewModel == null ? Visibility.Collapsed : Visibility.Visible;
return (App.Current.Resources["Locator"] as ViewModelLocator).CallViewModel;
}
set
{
if (this._CurrentCallViewModel != value)
{
this._CurrentCallViewModel = value;
(App.Current.Resources["Locator"] as ViewModelLocator).CallViewModel = value;
NotifyPropertyChanged(m => m.CurrentCallViewModel);
}
}
}
private CallViewModel _CurrentCallViewModel = null;
Кто-нибудь знает, почему эта новая модель ViewModel не будет привязана к новой модели? Есть ли какой-то механизм, похожий на NotifyPropertyChanged, который мне нужно вызвать из локатора, чтобы получить объекты для привязки?