XAML参考数据上下文

时间:2016-03-02 15:52:11

标签: c# wpf xaml mvvm telerik

我正在使用PRISM自动连接我的视图& ViewModels,但是我遇到了一个我无法解决的问题。

我正在使用日历控件,它允许用户通过打开新的模态窗口来创建新的约会。将其保存到日历中。

此窗口通过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

可能有两种方法可以解决它(我不能直接访问模态窗口,因为它是由控件本身自动生成的 - 我正在使用Telerik套件。)

1)确保ItemsSource比它找到的第一个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();
    }

因此我无法使上述解决方案发挥作用。

对我的问题的任何帮助将非常感谢。我只需要将该列表放到该模态窗口的组合框中。

1 个答案:

答案 0 :(得分:0)

最后,我设法通过为我的类创建额外的构造函数来解决问题,如下所示:

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

        InitializeCollections();
    }

这样我就可以轻松地从OP中采用 Solution Nr 2