我正在开发一个Xamarin Forms项目,我在一个View(比如DashBoardView.Xaml)中有一个分为两部分的屏幕。一部分是有一些菜单选项,另一部分我想在点击的菜单选项上加载不同的视图。 注册了不同ViewModel的动态视图(使用XLABS MVVM)ViewFactory。
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中的标签的命令被调用。有什么我做错了或有没有更好或优化的方法来实现同样的目标? 请参阅附带的屏幕截图以供参考。 DashboardView.xaml
答案 0 :(得分:0)
实例化视图不会自动实例化视图模型并将其设置为绑定上下文。
大多数(如果不是全部)MVVM框架将为您提供实例化或解析 页面的方法,该方法将自动查找并将相应的视图模型连接为好。不太确定使用viewmodel自动解析视图。
如果您的框架不支持,您可以在将视图添加到页面之前,通过实例化您的viewmodel,然后将其分配给视图的绑定上下文来自行完成。
请注意,XLabs是一个死的项目,我不太确定它是一个明智的想法继续使用它,我建议你看看当前的MVVM框架(有一堆)并选择一个适合你的需求和外观对你好。