使用PRISM的WPF级联组合框
本文关键字:组合 级联 WPF PRISM 使用 | 更新日期: 2023-09-27 18:16:36
为了简单起见,我的视图中有两个组合框。我希望在遵循MVVM设计模式和PRISM 6框架的同时将它们级联起来。在Brian Lagunas MVVM/Prism网络研讨会之后,他提到了DelegateCommand
的ObservesProperty
。我有一种预感,我应该用它,但不确定。我提供了一个非常简单的视图和视图模型,我不能得到工作。
XAML(视图):
<ComboBox ItemsSource="{Binding PackageNames}" SelectedItem="{Binding PackageNameSelected}" />
<ComboBox ItemsSource="{Binding PackageOptions}"/>
ViewModel:
public MainWindowViewModel() // Constructor
{
PackageNamesCommand = new DelegateCommand(PackageNamesCommandExecute);
PackageOptionsCommand = new DelegateCommand(PackageOptionsCommandExecute).ObservesProperty(() => PackageNameSelected);
}
private string _packageNameSelected;
public string PackageNameSelected
{
get { return _packageNameSelected; }
set { SetProperty(ref _packageNameSelected, value); }
}
private ObservableCollection<string> _packeNames;
public ObservableCollection<string> PackageNames
{
get { return _packeNames; }
set { SetProperty(ref _packeNames, value); }
}
private ObservableCollection<string> _packageOptions;
public ObservableCollection<string> PackageOptions
{
get { return _packageOptions; }
set { SetProperty(ref _packageOptions, value); }
}
public DelegateCommand PackageNamesCommand { get; set; }
private async void PackageNamesCommandExecute()
{
await Task.Factory.StartNew(() => GetPackageNames()).ContinueWith(t => PackageNames = ToObservableCollection(t.Result));
}
private IQueryable<string> GetPackageNames()
{
return //My LINQ Query Here
}
public DelegateCommand PackageOptionsCommand { get; set; }
private void PackageOptionsCommandExecute()
{
Task.Factory.StartNew(() => GetPackageOptions()).ContinueWith(t => PackageOptions = ToObservableCollection(t.Result));
}
private IQueryable<string> GetPackageOptions()
{
return // My LINQ query here
}
这真的不是Prism的问题。要完成此任务,只需将代码放入PackageNameSelected属性的setter中,然后调用方法来生成依赖的选项集合。还有其他方法可以做到这一点,但这是最直接的。