Events 如何在另一个项目中使用xaml和viewmodel

Events 如何在另一个项目中使用xaml和viewmodel,events,xaml,mvvm,viewmodel,windows-phone,Events,Xaml,Mvvm,Viewmodel,Windows Phone,我有一个WP7application应用程序,其中包含一个名为page1.xaml的xaml文件和一个viewmodel。xaml文件包含一个带有绑定命令的按钮 我有另一个名为sampleapplication的项目,在该项目中我启动了一个模拟器,并且必须显示另一个项目中的上面的page1.xaml文件 我能够使用以下命令从当前项目中的wp7应用程序加载上述xaml文件 (Application.Current.RootVisual作为PhoneApplicationFrame)导航(新Uri

我有一个WP7application应用程序,其中包含一个名为page1.xaml的xaml文件和一个viewmodel。xaml文件包含一个带有绑定命令的按钮

我有另一个名为sampleapplication的项目,在该项目中我启动了一个模拟器,并且必须显示另一个项目中的上面的page1.xaml文件

我能够使用以下命令从当前项目中的wp7应用程序加载上述xaml文件

(Application.Current.RootVisual作为PhoneApplicationFrame)导航(新Uri(“/WP7application;component/Views/page1.xaml”,UriKind.Relative))

但我无法在加载xaml后处理事件。如何在当前项目中使用按钮


我已在当前示例应用程序中添加了对wp7应用程序视图和视图模型的所有引用

您可以很容易地将视图和视图模型放在单独的程序集中,但其中包含视图的程序集(应用程序或库)必须引用视图模型所在的库

但有两件事需要注意:
1.如果视图和视图模型使用不同的程序集,则视图模型必须位于类库中,而不是主应用程序中。

2.确保代码的结构不存在任何循环引用。(随着复杂性的增加,这可能需要遵守规则。)

听起来好像视图的DataContext没有设置为视图模型的实例。有几种方法可以做到这一点

最简单的方法是将以下代码放在视图的已加载事件中:

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>

输出窗口中是否有任何绑定错误?添加一个简短但完整的示例来说明确切的问题如何?