Xamarin Forms 1 视图绑定到多个对象

Posted

技术标签:

【中文标题】Xamarin Forms 1 视图绑定到多个对象【英文标题】:Xamarin Forms 1 view binded to multiple objects 【发布时间】:2021-07-17 16:43:43 【问题描述】:

所以我不得不质疑如何将多个对象绑定到 1 个视图,因为根据我收集的信息,您不能将多个对象(即内容)绑定到每个视图。我得到了来自 SQL db 和 mongo db 的数据,来自一个的项目和来自另一个的产品。我希望能够根据项目和产品模型从视图中输入数据,并将其显示到从 2previous 混合的第三个对象中。想法是为某些项目从仓库中取出的产品生成库存日志。

【问题讨论】:

创建一个包含给定视图所需的所有数据的视图模型 【参考方案1】:

是的,您可以创建一个 ViewModel,其中包含您需要绑定到视图的所有数据(多个对象)。

您可以参考官方示例Xamarin.Forms - CollectionView。

以一页VerticalListSinglePreSelectionPage.xaml为例,我们可以将我们的数据添加到视图模型MonkeysViewModel.cs中,如下所示:

   public class MonkeysViewModel : INotifyPropertyChanged

    readonly IList<Monkey> source;
    Monkey selectedMonkey;
    int selectionCount = 1;

    public ObservableCollection<Monkey> Monkeys  get; private set; 
    public IList<Monkey> EmptyMonkeys  get; private set; 

    public Monkey SelectedMonkey
    
        get
        
            return selectedMonkey;
        
        set
        
            if (selectedMonkey != value)
            
                selectedMonkey = value;
            
        
    

    ObservableCollection<object> selectedMonkeys;
    public ObservableCollection<object> SelectedMonkeys
    
        get
        
            return selectedMonkeys;
        
        set
        
            if (selectedMonkeys != value)
            
                selectedMonkeys = value;
            
        
    

    public string SelectedMonkeyMessage  get; private set; 

   // other code

我们可以在xaml中绑定多个对象,这里我们在页面VerticalListSinglePreSelectionPage.xaml中绑定SelectedMonkeyMessage,Monkeys,SelectedMonkey和CommandMonkeySelectionChangedCommand,如下:

<StackLayout Margin="20">
    <Label Text="Binding SelectedMonkeyMessage" />
    <CollectionView ItemsSource="Binding Monkeys"
                    SelectionMode="Single"
                    SelectedItem="Binding SelectedMonkey"
                    SelectionChangedCommand="Binding MonkeySelectionChangedCommand">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Image Grid.RowSpan="2" 
                           Source="Binding ImageUrl" 
                           Aspect="AspectFill"
                           HeightRequest="60" 
                           WidthRequest="60" />
                    <Label Grid.Column="1" 
                           Text="Binding Name" 
                           FontAttributes="Bold" />
                    <Label Grid.Row="1"
                           Grid.Column="1" 
                           Text="Binding Location"
                           FontAttributes="Italic" 
                           VerticalOptions="End" />
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
 </StackLayout>

【讨论】:

嗨@Anton Mesila,我已经好几天没有收到你的消息了。如果有什么我可以在这里提供帮助的,请告诉我。

以上是关于Xamarin Forms 1 视图绑定到多个对象的主要内容,如果未能解决你的问题,请参考以下文章

使用绑定时滚动 Xamarin Forms 列表视图

Xamarin Forms Switch Toggled 事件未与视图模型绑定

如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签

Xamarin Forms ListView 绑定到 Observable 集合中的子对象列表

Xamarin.Forms绑定初始值后不更新

Xamarin.forms如何在列表中显示彼此相邻的项目