我有ViewModel,应该更新视图的用户界面控件根据数据从数据库。如果条目控件被正确更新,但即使参数更改了ViewModel中的值,我的选取器也不会获得更新的选择。
以下是来自View的Xaml的一些代码:
<Entry x:Name="TitleBox" Grid.Row="0" HorizontalOptions="FillAndExpand" Placeholder="Title" Text="{Binding Title, Mode=TwoWay}"/>
<Picker x:Name="TypeCombo" Title="Type" Grid.Row="2" SelectedItem="{Binding Type, Mode=TwoWay}" ItemsSource="{Binding FeaturedType}"/>和ViewModel:
public string Title
{
get => _Version.Title;
set
{
if (_Version.Title != value)
{
_Version.Title = value;
NotifyPropertyChanged("Title");
}
}
}
public string Type
{
get => _Version.Type;
set
{
if (_Version.Type != value)
{
_Version.Type = value;
NotifyPropertyChanged("Type");
}
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion在ViewModel中的某个时刻,会从数据库中为_Version分配一个对象,并相应地分配它的标题和类型。
当页面加载完成后,我的UI会更新标题,但是没有选择选择器中的类型,即使ViewModel中的值是正确的。Picker保持为-1 (尽管源项是正确的):
ObservableCollection<string> _featuredType;
public ObservableCollection<string> FeaturedType
{
get => _featuredType;
set
{
if (_featuredType != value)
{
_featuredType = value;
NotifyPropertyChanged("FeaturedType");
}
}
}我在这里失去了理智,因为UWP中的ComboBox相当于工作没有问题,但我不得不搬到Xamarin,因为我正在成为安卓的依赖。
下面是我绑定到ViewModel的方式:
public PageViewModel ViewModel { get; set; }
BindingContext = this.ViewModel = new PageViewModel();此外,我注意到在后台代码中进行一些测试,如下所示:
string testType = ViewModel.Type;
string testTitle = ViewModel.Title;返回正确的Title值,但Type值结果为空,即使在ViewModel中也是正确的。
发布于 2019-05-24 02:12:07
好的,我找到了解决方案,但是我不确定为什么我之前的方案不起作用。
@Sparsha把我带到了正确的方向,基本上为了避免顺序问题,我从Xaml中填充了ItemsSource,而不是像这样用ViewModel编写代码:
<Picker.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>Type1</x:String>
<x:String>Type2</x:String>
<x:String>Type3</x:String>
</x:Array>
</Picker.ItemsSource>这解决了我的问题,选取器从ViewModel获得了正确的SelectedItem。
但是,如果我不知道Source中提供了哪些项目,这将不会有太大帮助。幸运的是,在这种情况下,我可以预先定义选择器项。然而,我想知道为什么它不能与viewmodel中的代码一起工作。
https://stackoverflow.com/questions/56279307
复制相似问题