Я использую PRISM для автоматического подключения моих просмотров & ViewModels, однако я столкнулся с проблемой, которую я не могу решить.Справочный контекст данных XAML
Я использую элемент управления календарем, который позволяет пользователям создавать новые встречи, открывая новое модальное окно &, сохраняя его в календаре.
Это окно, стилизовано через ControlTemplate
, где у меня есть следующий пункт:
<telerik:RadComboBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Margin="3"
ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.EmployeeList}">
Предметы Источник этого выпадающего списка является ViewModels DataContext.EmployeeList - ObservableCollection<Employee>
.
Это будет работать как очарование, если оно не будет новым всплывающим окном. Таким образом, я считаю, что это также userControl, поэтому мой обычный код не распознает EmployeeList
.
Может быть 2 способа решения проблемы (у меня нет прямого доступа к модальному окну, поскольку он автоматически генерируется самим элементом управления - я использую пакет Telerik).
1) Убедитесь, что ItemSource будет копать глубже, чем самый первый UserControl
, который он находит. Может быть, слегка изменив код, он сможет это сделать? (Возможно, используя что-то вроде AncestorLevel ...?).
2) Telerik показал пример того, как добиться того, чтобы в следующей строке:
<local:ViewModel x:Key="ViewModel" /> -- define key first
ItemsSource="{Binding Source={StaticResource ViewModel}, Path=EmployeesSource}"...
НО вопрос с моим ViewModel является то, что под конструктору я передаю несколько interfaces
как следующее:
private readonly IEmployeeRepository _employeeRepository;
public EmployeeView_HolidaysViewModel(IEmployeeRepository employeeRepository)
{
_employeeRepository = employeeRepository;
InitializeCollections();
InitializeCommands();
}
и поэтому я не могу заставить вышеуказанное решение работать вообще.
Любая помощь с моей проблемой будет высоко оценена. Мне просто нужно получить этот список для этого списка модальных окон.
RelativeSource воняет. Я просто использую привязки ElementName. Кроме того, перейдите в TemplateBinding. Я не уверен, что это поможет вам в этом случае, но это может быть то, что вам нужно. – Will