我正在从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();