WPF Tree в ComboEditor - Infragistics WPF контролирует - PullRequest
0 голосов
/ 12 февраля 2020

В настоящее время я работаю над приложением WPF. NET 4.7 и использую элементы управления Infragistics WPF версии 18.

Мне нужно создать пользовательский XamComboEditor с XamDataTree внутри. Таким образом, ComboBox с выделением Tree внутри.

Выбор Tree прекрасно работает без XamComboEditor и выглядит следующим образом:

<iWPF:XamDataTree ItemsSource="{Binding Locations}">
    <iWPF:XamDataTree.GlobalNodeLayouts>
        <iWPF:NodeLayout Key="Locations" TargetTypeName="LocationViewModel" DisplayMemberPath="Name"/>
        <iWPF:NodeLayout Key="ChildLocations" TargetTypeName="string"/>
    </iWPF:XamDataTree.GlobalNodeLayouts>
</iWPF:XamDataTree>

enter image description here

Мой XamDataTree связан с наблюдаемой коллекцией Locations:

public ObservableCollection<LocationViewModel> Locations { get; set; } = new ObservableCollection<LocationViewModel>();

public class LocationViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<LocationViewModel> ChildLocations { get; set; } = new List<LocationViewModel>();
}

Мне нужно использовать установщик стилей на моем XamComboEditor, чтобы поместить XamDataTree в поле со списком.

Моя проблема сейчас в том, что я не знаю, как этого достичь или как передать контекст от XamComboEditor дальше к XamDataTree.

Я пробовал следующее, напрасно:

<iWPF:XamComboEditor ItemsSource="{Binding Locations}">
    <iWPF:XamComboEditor.ComboBoxStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <iXaml:XamDataTree ItemsSource="{Binding .}">
                            <iXaml:XamDataTree.GlobalNodeLayouts>
                                <iXaml:NodeLayout Key="Locations" TargetTypeName="LocationViewModel" DisplayMemberPath="{Binding Name}"/>
                                <iXaml:NodeLayout Key="ChildLocations" TargetTypeName="string"/>
                            </iXaml:XamDataTree.GlobalNodeLayouts>
                        </iXaml:XamDataTree>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </iWPF:XamComboEditor.ComboBoxStyle>
</iWPF:XamComboEditor>

Знаете ли вы, как решить эту проблему? Знаете ли вы, как передать контекст данных из родительского элемента управления, скажем, в дочерний элемент управления? Или, скорее, как поместить XamDataTree внутрь XamComboEditor?

1 Ответ

1 голос
/ 12 февраля 2020

Если я правильно понял, DataContext вашего XamlDataTree - это не то, что вы ожидаете (Locations ограничено в вас XamComboEditor).

Одним из способов решения этой проблемы является указание источника пути в расширении разметки Binding.
Вы можете использовать расширение разметки {x:Reference ...} для ссылки на именованный контроллер в дереве управления.

<iWPF:XamComboEditor x:Name="comboEditor" ItemsSource="{Binding Locations}">
    <iWPF:XamComboEditor.ComboBoxStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <iXaml:XamDataTree ItemsSource="{Binding Source={x:Reference Name=comboEditor}, Path=DataContext.Locations}">
                            <iXaml:XamDataTree.GlobalNodeLayouts>
                                <iXaml:NodeLayout Key="Locations" TargetTypeName="LocationViewModel" DisplayMemberPath="{Binding Name}"/>
                                <iXaml:NodeLayout Key="ChildLocations" TargetTypeName="string"/>
                            </iXaml:XamDataTree.GlobalNodeLayouts>
                        </iXaml:XamDataTree>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </iWPF:XamComboEditor.ComboBoxStyle>
</iWPF:XamComboEditor>

Этого также можно добиться, не называя элементов управления свойством RelativeSource в привязке (что-то вроде RelativeSource={RelativeSource AncestorType=iWPF:XamComboEditor}).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...