选择器 ItemSource 值未绑定在 XAML ListView 中

Posted

技术标签:

【中文标题】选择器 ItemSource 值未绑定在 XAML ListView 中【英文标题】:Picker ItemSource values not binding in a XAML ListView 【发布时间】:2021-04-16 16:57:20 【问题描述】:

希望您能提出建议,因为我已尝试使用代码隐藏和 MVVM 将 Listview 中的选择器绑定到我的项目源值的所有方法。选择器绑定在 ListView 外部工作,但不在内部 - 这是开箱即用的还是不可能的?

请在下面查看我的列表!

代码

                    <ListView
                            x:Name="TypesList"                
                            HeightRequest="53"
                            BackgroundColor="White"
                            IsGroupingEnabled="True"
                            IsPullToRefreshEnabled="false"
                            ItemsSource="Binding Items"                
                            IsRefreshing="Binding IsBusy"
                            RefreshCommand="Binding LoadTypesCommand"
                            SeparatorVisibility="None"  
                            >
                      
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell Height="63">
                                    <StackLayout Orientation="Horizontal"  VerticalOptions="Center">
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="150"/>
                                            </Grid.RowDefinitions>

                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="250"/>
                                                <ColumnDefinition Width="60"/>
                                                <ColumnDefinition Width="70"/>
                                            </Grid.ColumnDefinitions>
                                            <!-- -->
                                            <Label Grid.Column="0"
                                                   Grid.Row="0"
                                                   VerticalOptions="Center"
                                                   FontAttributes="None"                                       
                                                   Text="Binding .Name, Mode=TwoWay "
                                                   TextColor="Black"
                                                   VerticalTextAlignment="Center"
                                                   Margin="0,15,0,110"
                                                   BackgroundColor="White" 
                                                   Padding="20,10,0,10"
                                                   FontFamily="Hiragino Sans"
                                                   FontSize="14"
                                                   HeightRequest="53"
                                                   x:Name="userLabel"                                           
                                                  />
                                           
                                            <Entry Grid.Column="1"
                                                   Grid.Row="0"
                                                   Text="Binding .Amount, Mode=TwoWay"
                                                   TextColor="Black"
                                                   VerticalOptions="EndAndExpand"
                                                   Margin="0,15,20,110" 
                                                   BackgroundColor="White"                                    
                                                   FontFamily="Hiragino Sans"
                                                   FontSize="14"
                                                   HeightRequest="40"
                                                   WidthRequest="55"
                                                   x:Name="userEntry"
                                            />
                                            <Picker Grid.Column="2"
                                                    Grid.Row="0"
                                                    x:Name="mPicker"
                                                    ItemsSource="Binding UserOptions"
                                               
                                            />
                                        </Grid>
                                    </StackLayout>
                                </ViewCell>
                            </DataTemplate> 
                        </ListView.ItemTemplate>

代码

后面的代码

代码 mPicker.ItemsSource = ViewModel.UserOptions; 代码

模型分配 UserOptions,这适用于列表视图之外的选择器,所以我不认为模型有任何问题或需要发布此代码。

任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

列表视图有自己的绑定上下文。所以你需要获取视图模型的绑定上下文,然后像这样绑定到选择器

像这样设置视图的名称

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             x:Name="viewName">


<Picker Grid.Column="2"
        Grid.Row="0"
        x:Name="mPicker"
        ItemsSource="Binding BindingContext.UserOptions, Source=x:Reference viewName"
                                               
/>

【讨论】:

感谢您的帮助,我后面的代码不再检测到这个选择器,您对此有什么进一步的建议吗? 如果您在 xaml 中绑定选择器,那么您不再需要在代码视图中绑定它。将其绑定在代码后面或 xaml 删除这一行并尝试一下代码 mPicker.ItemsSource = ViewModel.UserOptions;代码 我让它再次检测到它,它已经删除了我所有的绑定,没有显示所有选择器的数据。还有其他想法吗? 我按照您的建议取出了 XAML 项绑定并保留了代码,但这也删除了我所有的选择器数据绑定...有什么我能做的吗?

以上是关于选择器 ItemSource 值未绑定在 XAML ListView 中的主要内容,如果未能解决你的问题,请参考以下文章

WPF如何更改xaml代码里ListBox的数据绑定

将 Picker ItemSource 绑定到 List<string> 不起作用 Xamarin.forms MVVM

Svelte 绑定选择值未在获取时更新

ComboBox不会在DataGridTemplateColumn中显示绑定数据

如何设置控件属性(在DataTemplate和UserControl中)的绑定以使用ItemSource的给定属性?

int 值未通过,无法识别的选择器发送到实例 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序