共享两个视图的datacontext

时间:2014-02-19 15:40:58

标签: c# silverlight xaml binding datacontext

我正在使用VS2012中的标准Silverlight导航应用程序构建一个网站。我想为我的主页视图和我的主视图提供相同的datacontext。我创建了一个带有一个属性Name的Employee类,我想在主页视图导航的文本块和主视图的内容中显示它。在主视图中,我还将有一个文本块,我可以从中更改名称的内容。

无论我如何设置datacontext,它总是为两个视图中的每一个创建一个employee实例。如何让他们使用相同的实例?

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}"/>

Home.xaml

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

1 个答案:

答案 0 :(得分:0)

这可以通过一个通常称为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();