共享两个视图的数据上下文



我正在从VS2012中的标准Silverlight导航应用程序构建一个网站。我希望我的主页视图和主页视图具有相同的数据上下文。我创建了一个具有一个属性 Name 的 Employee 类,我想在主页视图导航的文本块和主页视图的内容中显示该类。在主页视图中,我还将有一个文本块,从中我可以更改名称的内容。

无论我如何尝试设置数据上下文,它始终为两个视图中的每一个创建一个员工实例。如何使它们使用相同的实例?

员工.cs

public class Employee : INotifyPropertyChanged
{
    string _name = "Test";
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }      
    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
} 

MainPage.xaml

<TextBlock x:Name="ApplicationNameTextBlock" Style="{StaticResource ApplicationNameStyle}" 
           Text="{Binding Name}"/>

家.xaml

<TextBox Text="{Binding Name, Mode=TwoWay}"/>    
<TextBlock Text="{Binding Name}"/>  

这可以通过通常称为 ViewModelLocator 的帮助程序类来实现。

public static class ViewModelLocator
{
    private static Employee myEmployee = null;
    public static Employee GetEmployee()
    {
        if (myEmployee == null)
            myEmployee = new Employee();
        return myEmployee;
    }
}

在页面隐藏的代码中:

DataContext = ViewModelLocator.GetEmployee();

最新更新