如何根据另一个选择器中的选择填充一个选择器?
How to populate a picker based on selection in another picker?
我有一个 Xamarin.Forms 应用程序,它使用 FreshMvvm。我有两个用于选择国家和 states/provinces 的选择器控件。最初会填充国家选择器,但 states/provinces 列表应根据所选国家即时填充。我找不到如何使用命令而不是代码隐藏事件处理来完成它。
这是我在 MyPage.xaml:
中的控件
<Picker Title="Choose Country..."
ItemsSource="{Binding Countries}"
ItemDisplayBinding="{Binding Value}"
SelectedItem="{Binding SelectedCountry}"
Margin="0, 0, 0, 5" />
<Picker Title="Choose State..."
ItemsSource="{Binding States}"
ItemDisplayBinding="{Binding Value}"
SelectedItem="{Binding SelectedState}"
Margin="0, 0, 0, 5" />
我应该在 MyPageModel.cs 中输入什么?
使用 Freshmvvm,您可以使用 WhenAny
方法并监听 SelectedCountry
属性 上的变化。发生这种情况时,您将使用 SelectedCountry 按国家/地区筛选州集合,并使用结果更新您的 States
集合。
应该是这样的:
[PropertyChanged.AddINotifyPropertyChangedInterface]
public class MyViewModel : FreshBasePageModel
{
public ObservableCollection<Country> Countries { get; set; }
public ObservableCollection<State> States { get; set; }
// This would be the collection where you have all the States
private List<State> _allStatesCollection = new List<State>();
public Country SelectedCountry { get; set; }
public MyViewModel()
{
// Listening for changes on the `SelectedCountry`
this.WhenAny(OnCountryChanged, o => o.SelectedCountry);
}
//Method called when a new value is set in the `SelectedCountry` property
private void OnCountryChanged(string property)
{
//Filter the collection of states and set the results
var states = _allStatesCollection.Where(a => a.CountryCode == SelectedCountry.Code).ToList();
States = new ObservableCollection<State>(states);
}
}
注意:以上代码要求您使用 Fody INotifyPropertyChanged Nuget 包。如果您不使用它,您可以安装它或手动实现您的属性 PropertyChanged。这不会更改其余代码。
希望对您有所帮助。-
我有一个 Xamarin.Forms 应用程序,它使用 FreshMvvm。我有两个用于选择国家和 states/provinces 的选择器控件。最初会填充国家选择器,但 states/provinces 列表应根据所选国家即时填充。我找不到如何使用命令而不是代码隐藏事件处理来完成它。 这是我在 MyPage.xaml:
中的控件 <Picker Title="Choose Country..."
ItemsSource="{Binding Countries}"
ItemDisplayBinding="{Binding Value}"
SelectedItem="{Binding SelectedCountry}"
Margin="0, 0, 0, 5" />
<Picker Title="Choose State..."
ItemsSource="{Binding States}"
ItemDisplayBinding="{Binding Value}"
SelectedItem="{Binding SelectedState}"
Margin="0, 0, 0, 5" />
我应该在 MyPageModel.cs 中输入什么?
使用 Freshmvvm,您可以使用 WhenAny
方法并监听 SelectedCountry
属性 上的变化。发生这种情况时,您将使用 SelectedCountry 按国家/地区筛选州集合,并使用结果更新您的 States
集合。
应该是这样的:
[PropertyChanged.AddINotifyPropertyChangedInterface]
public class MyViewModel : FreshBasePageModel
{
public ObservableCollection<Country> Countries { get; set; }
public ObservableCollection<State> States { get; set; }
// This would be the collection where you have all the States
private List<State> _allStatesCollection = new List<State>();
public Country SelectedCountry { get; set; }
public MyViewModel()
{
// Listening for changes on the `SelectedCountry`
this.WhenAny(OnCountryChanged, o => o.SelectedCountry);
}
//Method called when a new value is set in the `SelectedCountry` property
private void OnCountryChanged(string property)
{
//Filter the collection of states and set the results
var states = _allStatesCollection.Where(a => a.CountryCode == SelectedCountry.Code).ToList();
States = new ObservableCollection<State>(states);
}
}
注意:以上代码要求您使用 Fody INotifyPropertyChanged Nuget 包。如果您不使用它,您可以安装它或手动实现您的属性 PropertyChanged。这不会更改其余代码。
希望对您有所帮助。-