我正在使用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}"/>
答案 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();