选择器 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 中的主要内容,如果未能解决你的问题,请参考以下文章
将 Picker ItemSource 绑定到 List<string> 不起作用 Xamarin.forms MVVM
ComboBox不会在DataGridTemplateColumn中显示绑定数据
如何设置控件属性(在DataTemplate和UserControl中)的绑定以使用ItemSource的给定属性?
int 值未通过,无法识别的选择器发送到实例 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序