繁体   English   中英

ComboEditor 中的 WPF 树 - Infragistics WPF 控件

[英]WPF Tree in ComboEditor - Infragistics WPF controls

我目前正在开发 WPF .NET 4.7 应用程序,我使用 Infragistics WPF 控件版本 18。

我需要创建一个自定义XamComboEditor ,其中包含一个XamDataTree 因此一个 ComboBox 里面有一个树选择。

树选择在没有 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>

在此处输入图片说明

我的 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放在组合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

如果我理解正确,那么您的XamlDataTreeDataContext不是您所期望的(在您XamComboEditor绑定的Locations )。

解决此问题的一种方法是在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>

您也可以在不使用 Binding 中的RelativeSource属性命名控件的情况下实现此目的(类似于RelativeSource={RelativeSource AncestorType=iWPF:XamComboEditor} )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM