Привязать к родительскому / одноуровневому объекту текущего свойства datacontext / source в WPF

Как мы можем выполнить привязку к родительскому элементу / сестре текущего контекста данных (то есть к исходному свойству, представляющему текущий контекст данных)?

Я не речь идет о привязке к свойству родительского элемента управления (в этом случае задействован родительский элемент цели, а не источник) - и это можно легко сделать с помощью RelativeSourceMode = FindAncestor.

RelativeSourceMode = PreviousData обеспечивает ограниченную поддержку привязки к предыдущему родственнику элемент данных, но не родителю или другим братьям и сестрам.

Пустой пример:
(предположим, что INPC на месте)
Как привязать ItemsSource ComboBox к свойству Departments ViewModel?

public class Person
{
    public string Name { get; set; }
    public string Department { get; set; }
}

public class PersonViewModel
{
    public List<Person> Persons { get; set; }
    public List<string> Departments { get; set; }

    public PersonViewModel()
    {
        Departments = new List<string>();
        Departments.Add("Finance");
        Departments.Add("HR");
        Departments.Add("Marketing");
        Departments.Add("Operations");

        Persons = new List<Person>();
        Persons.Add(new Person() { Name = "First", Department = "HR" });
        Persons.Add(new Person() { Name = "Second", Department = "Marketing" });
        Persons.Add(new Person() { Name = "Third", Department = "Marketing" });
    }
}

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="300" Width="300">
    <Grid>
        <DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Departments???}"
                                      SelectedValue="{Binding Department}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
6
задан publicgk 23 April 2011 в 14:40
поделиться