【问题标题】:How to use xaml with viewmodel in another project如何在另一个项目中使用 xaml 和 viewmodel
【发布时间】:2012-12-13 04:25:45
【问题描述】:

我有一个 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 应用程序视图和视图模型的所有引用

【问题讨论】:

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

标签: events xaml mvvm viewmodel windows-phone


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    听起来好像您的视图的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 2022-01-23
      • 2019-06-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多