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, который мне нужно вызвать из локатора, чтобы получить объекты для привязки?

0 ответов

Другие вопросы по тегам