我正在使用PRISM自动连接我的Views和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}">

此组合框的Items来源是ViewModels DataContext.EmployeeList-ObservableCollection<Employee>

只要它不是新的弹出窗口,它就可以像 super 按钮一样工作。这样,我相信它也是一个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();
    }

因此,我根本无法使上述解决方案正常工作。

我的问题的任何帮助将不胜感激。我只需要将该列表添加到该模式窗口的组合框即可。

最佳答案

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

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

        InitializeCollections();
    }

这样,我可以轻松地从OP中采用解决方案Nr 2

关于c# - XAML引用数据上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35752011/

10-11 07:31