从不同的视图模型调用一个视图模型中的方法
本文关键字:模型 视图 一个 方法 调用 | 更新日期: 2023-09-27 18:28:43
我正在Windows Phone 8.1应用程序上使用MVVMLight进行开发。我们有一个按名字或姓氏对用户列表进行排序的设置。在更改此设置(由绑定到SettingsViewModel中的属性的ListPicker执行)后,我想在另一个视图模型(OtherViewModel)中调用一个方法,以对OtherViewModel的相应视图上的用户列表重新排序。settings store用于将排序设置存储在用户的手机上。
我不希望通过var vm = new ViewModel()
来创建视图模型依赖关系,因为这两个视图模型之间没有父/子关系。有人告诉我,委派是一个不错的选择,但我不太熟悉如何使用委派实现解决方案。
如有任何帮助,我们将不胜感激。
设置视图
<toolkit:ListPicker x:Name="ContactsSortParametersListPicker"
ItemsSource="{Binding ContactsSortParameters, Mode=OneTime}"
SelectedItem="{Binding ContactsSortParametersSelected, Mode=TwoWay}"
SelectionChanged="ContactsSortParametersListPicker_SelectionChanged"/>
设置视图(代码隐藏)
private void ContactsSortParametersListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// want to call method from MainViewModel that updates a list in Main View
}
设置ViewModel
public IEnumerable<SortOptions> ContactsSortParameters
{
get { return (IEnumerable<SortOptions>)Enum.GetValues(typeof(SortOptions)); }
}
private SortOptions _sortContactsParameterSelected;
public SortOptions ContactsSortParametersSelected
{
get { return _sortContactsParameterSelected; }
set
{
SetProperty(ref _sortContactsParameterSelected, value);
_settingsStore.ContactsSortParameter = _sortContactsParameterSelected;
}
}
OtherViewModel
public async Task LoadDirectory()
{
...relevant logic here...
}
如果您使用MVVM Light,我假设您的App.xaml资源中有ViewModelLocator实例,定义如下。
<vm:ViewModelLocator xmlns:vm="clr-namespace:WPApp.ViewModel" x:Key="Locator" />
在您的设置中查看代码背后:
private async void ContactsSortParametersListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
await ((ViewModelLocator)App.Current.Resources["Locator"]).OtherViewModel.LoadDirectory();
}