我有一个WP7应用程序应用程序,其中包含一个名为page1.xaml的带有viewmodel的xaml文件。 xaml文件包含带有绑定命令的按钮
我有另一个名为sampleapplication的项目,我在其中启动了一个模拟器,并且必须显示上面的page1.xaml文件,该文件位于另一个项目中。
我可以使用
从当前项目中的wp7 app加载上述xaml文件(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri(“/ WP7application; component / Views / page1.xaml”,UriKind.Relative));
但是在加载xaml之后我无法处理事件。如何在当前项目中使用该按钮?
我在当前的sampleapplication中添加了对wp7 app视图和viewmodels的所有引用
答案 0 :(得分:0)
您可以轻松地在单独的程序集中查看和查看模型,但包含视图的程序集(应用程序或库)必须具有对视图模型所在的库的引用。
但有两件事需要注意:
1.如果您对视图和视图模型使用不同的程序集,则视图模型必须位于类库中,而不是主应用程序。
2.确保构造代码,以便您没有任何循环引用。 (随着复杂性的增加,这可能需要遵守纪律。)
答案 1 :(得分:0)
听起来好像您的视图的DataContext未设置为视图模型的实例。有几种方法可以做到这一点。
最简单的方法是将以下代码放在视图的Loaded事件中:
private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
DataContext = new ViewModel();
}
首选方法是在应用程序项目中定义视图模型定位器。创建视图模型的实例。
public class ViewModelLocator
{
private readonly ViewModel _viewModel = new ViewModel();
public ViewModel Main
{
get { return _viewModel; }
}
}
在App.XAML中创建视图模型定位器:
<Application xmlns:vm="clr-namespace:groovd.client.phone.ViewModels" >
<Application.Resources>
<ResourceDictionary>
<vm:ViewModelLocator xmlns:vm="clr-namespace:MyApp.ViewModels" x:Key="Locator" />
</ResourceDictionary>
</Application.Resources>
</Application>
然后从页面中的视图模型定位器获取属性:
<phone:PhoneApplicationPage
DataContext="{Binding Main, Source={StaticResource Locator}}">
</phone:PhoneApplicationPage>