Xamarin 表单从 listview 绑定到 viewmodel

Posted

技术标签:

【中文标题】Xamarin 表单从 listview 绑定到 viewmodel【英文标题】:Xamarin forms binding to viewmodel from listview 【发布时间】:2021-10-20 03:22:06 【问题描述】:

我有一个列表视图,它从我的 viewModel 绑定到一个 bindingList,所以我可以使用模型中的属性名称,但是如何在我的列表视图中再次绑定到来自 viewmodel 的属性?

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Finance.Pages.ItemsPage"
             xmlns:conv="clr-namespace:Finance.Converters"
             x:Name="Page">
    <ContentPage.Resources>
        <ResourceDictionary>
            <conv:ItemTypeNameToStringConverter x:Key="ItemTypeNameToStringConverter" />
            <conv:ColumnToColorConverter x:Key="ColumnToColorConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    
    <ContentPage.Content>
        <StackLayout Padding="10,10">

            <StackLayout Orientation="Horizontal">
                <Label Text="Compound Items:"></Label>
                <CheckBox IsChecked="Binding CompoundItems"></CheckBox>
            </StackLayout>

            <ListView ItemsSource="Binding Items">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <ViewCell.ContextActions>
                                <MenuItem Text="Edit" Command="Binding Path=EditItemCommand" CommandParameter="Binding ."/>
                                <MenuItem Text="Delete" Command="Binding DeleteItemCommand" CommandParameter="Binding ."/>
                            </ViewCell.ContextActions>
                            <StackLayout Orientation="Horizontal" >
                                <Label Text="Binding Name, Converter=StaticResource ItemTypeNameToStringConverter" HorizontalOptions="StartAndExpand"/>

                                <Label Text="Binding Count" BindingContext="x:Reference Name=Page" IsVisible="Binding CompoundItems" HorizontalOptions="StartAndExpand"/>

                                <Label Text="Binding Amount" TextColor="Binding Destination, Converter=StaticResource ColumnToColorConverter"></Label>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>



    </ContentPage.Content>
</ContentPage>

属性 CompoundItems 是我的视图模型中的布尔值。

提前致谢,

【问题讨论】:

【参考方案1】:

你可以这样做:

IsVisible="Binding BindingContext.CompoundItems, Source=x:Reference Name=Page"

或者使用 relativesource 来获取父 BindingContext

<Label Text="Binding Count" IsVisible="Binding CompoundItems, Source=RelativeSource AncestorType=x:Type local:YourViewModelType"/>

【讨论】:

以上是关于Xamarin 表单从 listview 绑定到 viewmodel的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单中将数组绑定到 ListView

在 Xamarin 表单中将 Observable 集合绑定到我的 ListView 时遇到问题

Xamarin 表单 ListView ItemTapped/ItemSelected 命令绑定在 XAML

Xamarin 表单 ListView 绑定

Xamarin表单ListView ItemTapped / ItemSelected在XAML上绑定命令

ListView 内的 Xamarin 表单按钮命令绑定