C# 如何将集合从ViewModel获取到视图?
我有一个对象的C# 如何将集合从ViewModel获取到视图?,c#,mvvm,xamarin.forms,C#,Mvvm,Xamarin.forms,我有一个对象的observeCollection,该对象存储在ViewModel中,对于每个对象,我想在我的视图中添加一个BoxView。我计划在XAML代码中构建boxview,使其与业务逻辑分离。我的问题是,我无法从视图中找到访问视图模型中集合的正确方法。是否有方法将视图中的集合变量绑定到视图模型中的集合变量,或者可能有人知道更好的方法来实现类似的功能?您应该使用{Binding}语法使用{Binding}将视图模型集合绑定到列表视图的ItemsSource属性。您可以在中看到这方面的示例
observeCollection
,该对象存储在ViewModel
中,对于每个对象,我想在我的视图中添加一个BoxView
。我计划在XAML代码中构建boxview
,使其与业务逻辑分离。我的问题是,我无法从视图
中找到访问视图模型
中集合的正确方法。是否有方法将视图中的集合变量绑定到视图模型中的集合变量,或者可能有人知道更好的方法来实现类似的功能?您应该使用{Binding}
语法使用{Binding}
将视图模型集合绑定到列表视图的ItemsSource
属性。您可以在中看到这方面的示例
不要忘记将BindingContext
设置为ViewModel
类的实例
要定义每个项目的显示方式,您需要声明一个ItemTemplate
。基于您的需求的简单示例如下:
<ListView x:Name="MyList" ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<DataTemplate>
<BoxView />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果要使用mvvm访问代码隐藏中的数据,可以执行以下操作:
vm = new YourViewModel(optionalParameter);
BindingContext = vm;
yourListView.ItemsSource = theDataYouWantToPersist;
这就是我的工作。如果您需要更多详细信息,请提供更多详细信息和代码。我希望根据集合中每个对象的数据创建每个BoxView的尺寸(纯图形化,不显示任何信息)。我可以将集合绑定到ListView并将IsVisible=false,但这似乎不正确。您可以尝试绑定到HeightRequest
和WidthRequest
属性,但我不确定它在列表场景中如何工作。您必须将hasUnderRows
属性设置为true
。这样做可以正确返回我的ViewModel集合,但是在绘制屏幕后会调用OnBindingContextChanged()方法,因此此时无法添加BoxView。有什么建议吗?如果你知道你的收藏已经满了,你可以走@Idev路。并在代码隐藏构造函数中创建UI。
public partial class MyPage
{
private MyViewModel _viewModel;
public MyPage()
{
InitializeComponent();
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
_viewModel = BindingContext as MyViewModel;
var collection = _viewModel.MyCollection;
}
}
public partial class MyPage
{
private MyViewModel _viewModel;
public MyPage()
{
InitializeComponent();
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
_viewModel = BindingContext as MyViewModel;
var collection = _viewModel.MyCollection;
}
}