如何从ViewModel操作视图(XAML)?(沙马林表格)
如何从ViewModel操作视图(XAML) 例如,我有一个对象的详细视图。视图有一个网格。根据对象的不同,网格的行数和列数应该不同。列数和行数在对象详细信息中设置。是否可以从ViewModel中执行此操作,或者我必须在View.cs中执行此操作 我从ListView(OnItemSelect)打开局部视图: AlgoDetailPage-这里我想添加列和行,具体取决于对象如何从ViewModel操作视图(XAML)?(沙马林表格),xaml,xamarin,mvvm,xamarin.forms,Xaml,Xamarin,Mvvm,Xamarin.forms,如何从ViewModel操作视图(XAML) 例如,我有一个对象的详细视图。视图有一个网格。根据对象的不同,网格的行数和列数应该不同。列数和行数在对象详细信息中设置。是否可以从ViewModel中执行此操作,或者我必须在View.cs中执行此操作 我从ListView(OnItemSelect)打开局部视图: AlgoDetailPage-这里我想添加列和行,具体取决于对象 <?xml version="1.0" encoding="utf-8" ?> <ContentPage
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NotsanHessen.Views.AlgoDetailPage"
Title="{Binding Algo.Title}">
<StackLayout>
<Grid>
</Grid>
</StackLayout>
</ContentPage>
ViewModel:
public class AlgoDetailViewModel : BaseViewModel
{
public Algo Algo { get; set; }
public AlgoDetailViewModel(Algo algo = null)
{
this.Algo = algo;
// Rows: algo.Rows
// Cols: algoCols
}
}
从技术上讲,您不必从视图本身进行操作。如果希望完全正统,可以创建自定义控件来为您处理绑定。就我个人而言,我不建议遵循某种理论,但如果你愿意,这是可能的
除此之外,您可以尝试查看将出现在Xamarin 4.0中的CollectionView,它可能接近您所要求的内容(您还没有确切指定如何处理列宽)。还有一些第三方组件可以处理这个问题。您不需要从VM操作视图。相反,视图应该使用VM的属性来确定其布局。在本例中,您将根据来自VM的数据在视图中添加行和列 如果它是一个复杂的网格,则有两个不同的内容视图。在xaml中,根据条件显示或隐藏内容视图。通过这种方式,您可以随时管理代码。如果确实需要从ViewModel访问视图,您可以将视图的加载事件绑定到命令,并将视图本身作为命令参数传递。您不需要从VM操作视图。相反,视图应该使用VM的属性来确定其布局。在这种情况下,您将根据VM中的数据在视图中添加行和列。@Jason您的提示将告诉我正确的方法,当您将其发布为答案时,我会将其标记为解决方案。
public partial class AlgoDetailPage : ContentPage
{
AlgoDetailViewModel viewModel;
public AlgoDetailPage(AlgoDetailViewModel viewModel)
{
InitializeComponent();
BindingContext = this.viewModel = viewModel;
}
public AlgoDetailPage()
{
InitializeComponent();
BindingContext = viewModel;
}
}
public class AlgoDetailViewModel : BaseViewModel
{
public Algo Algo { get; set; }
public AlgoDetailViewModel(Algo algo = null)
{
this.Algo = algo;
// Rows: algo.Rows
// Cols: algoCols
}
}