使用PRISM的WPF级联组合框

本文关键字:组合 级联 WPF PRISM 使用 | 更新日期: 2023-09-27 18:16:36

为了简单起见,我的视图中有两个组合框。我希望在遵循MVVM设计模式和PRISM 6框架的同时将它们级联起来。在Brian Lagunas MVVM/Prism网络研讨会之后,他提到了DelegateCommandObservesProperty。我有一种预感,我应该用它,但不确定。我提供了一个非常简单的视图和视图模型,我不能得到工作。

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的WPF级联组合框

这真的不是Prism的问题。要完成此任务,只需将代码放入PackageNameSelected属性的setter中,然后调用方法来生成依赖的选项集合。还有其他方法可以做到这一点,但这是最直接的。