0

我正在开发一个 Xamarin Forms 项目,其中我有一个屏幕分为 2 个部分,在一个视图中(比如 DashBoardView.Xaml)。一方面是有一些菜单选项,另一方面我想在单击菜单选项时加载不同的视图。具有注册(使用 XLABS MVVM)ViewFactory 的不同 ViewModel 的动态视图。

DashBoardView.Xaml

<Grid>
   <Grid ColumnSpacing="0" RowSpacing="0"  BackgroundColor="#404040">
    // menu options having Command binded in DashboardViewModel
   </Grid>

   <ContentView Grid.Row="0" Grid.Column="1" BackgroundColor="White"
   Content="{Binding DashboardDetailView}">
     // views are binded with DashboardDetailView 
    // views are loaded dynamically to DashboardDetailView 
      (bindable property) using new Keyword when menu option
       command is executed.
   </ ContentView>
</Grid>


DashBoardViewModel.CS

  private Command _dashboardMenuOptionCommand;
    public Command DashboardMenuOptionCommand
    {
        get
        {
            return _ dashboardMenuOptionCommand?? (_dashboardMenuOptionCommand = new Command(() => {
                DashboardDetailView = new ABCView();
            }));
        }
    }

注意:ABCView 是使用 xLab 的 ViewFactory 向 ABCViewModel 注册的 Xaml 视图

问题:问题是 ABCView 正在加载,但没有发生用户交互,因为没有调用绑定到 ABCViewModel 中标签的命令。我做错了什么还是有更好或优化的方法来实现相同的目标?请找到随附的屏幕截图以供参考。 仪表板视图.xaml

4

1 回答 1

0

实例化视图不会自动实例化视图模型并将其设置为绑定上下文。

大多数(如果不是全部)MVVM 框架将为您提供实例化或解析页面的方法,该方法也会自动查找并连接适当的视图模型。不太确定使用视图模型自动解析视图

如果您的框架不支持,您可以通过实例化您的视图模型,然后将其分配给视图的绑定上下文,然后再将视图添加到页面来自己完成。

请注意,XLabs 是一个死项目,我不太确定继续使用它是一个聪明的主意,我建议您查看当前的 MVVM 框架(有很多)并选择一个适合您的需求并且看起来不错的.

于 2017-05-19T08:50:54.047 回答