Привязка сетки данных к выбранному элементу другой сетки данных - PullRequest
2 голосов
/ 02 января 2012

У меня есть две DataGrids.EmployeeGrid и WorkSessionsGrid.У каждого сотрудника есть список рабочих сессий, к которым я хочу, чтобы пользователь получил доступ, выбрав элемент в EmployeeGrid, который должен заставить WorkSessionsGrid генерировать рабочие сессии для выбранного сотрудника.Почему следующее неверно?

<DataGrid Name="dg_2" ItemsSource="{Binding ElementName=dg_1, Path=SelectedItem.WorkSessions}"/>

Обновление Я пришел к выводу, что проблема должна быть в одном из других слоев.Вот остаток моего кода, надеюсь, кто-то сможет мне помочь.Есть ли что-то принципиально, чего мне не хватает?

Код позади xaml

    public partial class MainWindow : Window
{
    public EmployeeViewModel EmployeeViewModel = new EmployeeViewModel();


    public MainWindow()
    {
        InitializeComponent();

        menu_employee.DataContext = EmployeeViewModel;
        sp_employee.DataContext = EmployeeViewModel;
        datagrid_employees.ItemsSource = EmployeeViewModel.EmployeesView;
        sp_worksessions.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions;
        menu_worksession.DataContext = EmployeeViewModel.SelectedEmployee.WorkSessions;
        datagrid_worksessions.ItemsSource = EmployeeViewModel.SelectedEmployee.WorkSessions;

    }
}

WorkSessionViewModel

class WorkSessionViewModel : ViewModelBase
{
    private WorkSessions _workSessionsModel = new WorkSessions();
    public WorkSessions WorkSessionsView = new WorkSessions();

    private WorkSessionModel _selectedWorkSession = new WorkSessionModel();
    public WorkSessionModel SelectedWorkSession
...

WorkSessionModel

[Serializable]
public class WorkSessions : ObservableCollection<WorkSessionModel>
{
    public WorkSessions()
    {

    }
}
[Serializable]
public class WorkSessionModel : INotifyPropertyChanged
{
    private DateTime _dateTime;
    private string _id;
    private double _hours;
    public WorkSessionModel()
    {
    }

Ответы [ 4 ]

0 голосов
/ 03 января 2012

Вы должны добавить еще один элемент для EmployeeViewModel, который называется: SelectedEmployee и связать его с выбранным элементом сетки сотрудников, mode = TwoWay.

Тогда привязка данных для второй сетки должна выглядеть так:1004 *

Поскольку обе сетки находятся в одном и том же окне, поэтому вы должны устанавливать только datacontext только для окон.В стороне модели представления у вас есть 2 свойства зависимости: EmployeeList, SelectedEmployee.Принимая во внимание, что EmployeeList связан с ItemsSource сетки сотрудников.SelectedEmployee привязывается к SelectedItem в сетке сотрудников.

0 голосов
/ 02 января 2012

Этот бит XAML выглядит вполне корректно, попробуйте отладить привязку , могут быть некоторые другие проблемы, такие как визуальные разрывы дерева или вероятность того, что коллекция WorkSessions является полем, а не свойством и т. Д.

Если есть ошибки привязки, поделитесь ими.

0 голосов
/ 03 января 2012

Как правильно указал @HB, используйте окно вывода Visual Studio, чтобы увидеть любые ошибки привязки.Они скажут вам, если привязки терпят неудачу.Если вы обнаружите ошибки привязки, то ваша привязка должна быть решена для двух возможных проблем ...

  1. Источник данных неверен.Правильно ли задан контекст данных и источник элементов для этого элемента пользовательского интерфейса, например DataGrid?
  2. Путь свойства в привязке может быть неправильным.У вашего SelectedItem объекта есть какое-либо свойство с именем WorkSessions?и т.д.

Кроме этого, мы до сих пор не знаем, что такое dg_1 и dg_2 из вашего XAML.Ваш код позади показывает разные имена datagrid_employees и datagrid_worksessions Я думаю.

0 голосов
/ 02 января 2012

Попробуйте связать с элементом вместо.

<DataGrid Content="{Binding ElementName=ListOfEmp, Path=SelectedItem.Name}" DataContext="{Binding}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...