WPF пытается связать модель слишком рано? - PullRequest
0 голосов
/ 09 марта 2011

Использование WPF и Prism.

У меня есть представление, содержащее 1 текстовый блок

<UserControl x:Class="ArmoryModule.Views.ResultsView"
             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" 
             xmlns:Views="clr-namespace:ArmoryModule.Views" xmlns:vmdc="clr-namespace:ArmoryModule.ViewModels"
             mc:Ignorable="d">

    <UserControl.DataContext>
        <vmdc:ResultsViewModel />
    </UserControl.DataContext>

    <Grid>
        <TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
    </Grid>
</UserControl>

, пытающийся привязаться к соответствующей части ResultsViewModel ниже

class ResultsViewModel : ViewModel
{
    private Character _character;

    public Character Character
    {
        get { return _character; }
        set
        {
            if (_character != value)
            {
                _character = value;
                RaisePropertyChanged(() => Name);
            }
        }
    }

    public string Name
    {
        get { return _character.Name; }
    }
}

Строит нормально, ломается при запуске.Я получаю ссылку на объект, не отправленную в экземпляр ошибки объекта в

get { return _character.Name; }

Я знаю, что символ не заполняется при запуске, и именно поэтому я получаю вышеуказанную ошибку.Я не знаю, где создать Character, чтобы использовать две модели, которые у меня есть.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Либо добавьте его в конструктор для модели представления

public ResultsViewModel()
{
    _character = new Character();
}

, либо просто добавьте проверку в получателе, например

get
{
    return _character != null ? _character.Name : string.empty;
}
0 голосов
/ 09 марта 2011

Derp.

public string Name
{
    get { return _character == null ? string.Empty : _character.Name; }
}
...