1

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

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

我可以使用当前项目中的 wp7 应用程序加载上述 xaml 文件

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/WP7application ;component/Views/page1.xaml", UriKind.Relative));

但我无法在加载 xaml 后处理这些事件。我怎样才能让按钮在我当前的项目中工作?

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

4

2 回答 2

0

It sounds as though the DataContext of your view is not set to an instance of the view model. There are several ways you can do this.

The easiest is simply to put the following code in the Loaded event of the view:

private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    DataContext = new ViewModel();
}

The preferred way is to define a view model locator in your application project. Create an instance of your view model.

public class ViewModelLocator
{
    private readonly ViewModel _viewModel = new ViewModel();

    public ViewModel Main
    {
        get { return _viewModel; }
    }
}

Create your view model locator in the 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>

Then get the property from the view model locator in the page:

<phone:PhoneApplicationPage 
    DataContext="{Binding Main, Source={StaticResource Locator}}">
</phone:PhoneApplicationPage>
于 2012-12-13T19:22:02.797 回答
0

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

不过有两点需要注意:
1. 如果您对视图和视图模型使用不同的程序集,则视图模型必须在类库中而不是主应用程序中。
2. 一定要结构化你的代码,这样你就没有任何循环引用。(随着复杂性的增加,这可能需要纪律来避免。)

于 2012-12-13T14:02:06.730 回答