WPF试图过早绑定模型?

时间:2011-03-08 21:46:16

标签: c# wpf oop data-binding prism

使用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; }
    }
}

建立良好,在启动时休息。我得到一个对象ref没有发送到

上的对象错误的实例
get { return _character.Name; }

我知道在启动时没有填充字符,这就是我遇到上述错误的原因。我在创建Character的位置上毫无头绪,因此我拥有的2个视图模型可以使用它。

2 个答案:

答案 0 :(得分:2)

将其添加到视图模型的构造函数

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

或者只是在getter中添加一个检查,例如

get
{
    return _character != null ? _character.Name : string.empty;
}

答案 1 :(得分:0)

DERP。

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