WPF Cascading Combobox с использованием PRISM 6

64
8

Чтобы все было просто, у меня есть два комбобокса на моем представлении. Я хотел бы каскадировать их, придерживаясь шаблона проектирования MVVM и структуры PRISM 6. После Брайан Lagunas MVVM/Prism вебинара он упоминает DelegateCommand ObservesProperty. У меня есть догадка, что я должен использовать, но не уверен. Я предоставил очень простой View и ViewModel, что я не могу работать.

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
}

спросил(а) 2021-01-19T22:16:38+03:00 6 месяцев, 1 неделя назад
1
Решение
90

Это не проблема Призмы. Для выполнения этой задачи вам просто нужно поместить код в установщик свойства PackageNameSelected, а затем вызвать свой метод для создания зависимой коллекции опций. Есть и другие способы сделать это, но это наиболее прямолинейно.

ответил(а) 2021-01-19T22:16:38+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема