2016-03-02 3 views
1

Я использую 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(); 
    } 

и поэтому я не могу заставить вышеуказанное решение работать вообще.

Любая помощь с моей проблемой будет высоко оценена. Мне просто нужно получить этот список для этого списка модальных окон.

+0

RelativeSource воняет. Я просто использую привязки ElementName. Кроме того, перейдите в TemplateBinding. Я не уверен, что это поможет вам в этом случае, но это может быть то, что вам нужно. – Will

ответ

0

В конце концов мне удалось решить эту проблему путем создания дополнительного конструктора для моего класса, который выглядит следующим образом:

public EmployeeView_HolidaysViewModel() 
    { 
     _employeeRepository = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IEmployeeRepository>(); 

     InitializeCollections(); 
    } 

Таким образом, я могу легко принять решение Nr 2 от ОП.

Смежные вопросы