C# 将属性从ItemsSource中的元素绑定到标签内容

C# 将属性从ItemsSource中的元素绑定到标签内容,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我已经创建了自己的用户控件。此控件具有自己的属性itemsource,类型为Dictionary。键-它是集合中绑定到ItemsSource的元素的标题 我是否可以访问ItemsSource的任何属性,而不将其值单独添加到ItemsSource(不转换为列表) 我可以想象一个解决方案-将属性添加到类节点,该节点将使用ItemsSource的Value属性初始化。之后,它像Value.Description一样绑定 公共类节点:INotifyPropertyChanged { 但是这是一个好的

我已经创建了自己的用户控件。此控件具有自己的属性
itemsource
,类型为
Dictionary
。键-它是集合中绑定到ItemsSource的元素的标题

我是否可以访问
ItemsSource
的任何属性,而不将其值单独添加到
ItemsSource
(不转换为
列表



我可以想象一个解决方案-将属性添加到类节点,该节点将使用ItemsSource的Value属性初始化。之后,它像Value.Description一样绑定

公共类节点:INotifyPropertyChanged {


但是这是一个好的解决方案吗?从性能方面来说。谢谢你必须设置
ItemTemplate

<ComboBox ItemsSource="{Binding Books}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}"/>
                <TextBlock Text="{Binding Value.Description}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>


您不能只绑定到
值。说明
?@AntiHeadshot,不可以…值不可识别您可以添加一个XAML snippetKey而值不返回吗anything@demo书籍的类型为
Dictionary
,您在输出中看到任何绑定错误吗?@demo因此没有类似
System.Windows的行。数据错误:40:BindingExpr会话路径错误:
在您的输出窗口中?@demo我下载了演示文件并尝试绑定到
SelectedItems
,似乎Multiselect没有正确更新属性。
<controls:MultiSelectComboBox SelectedItems="{Binding SelectedBooks, Mode=TwoWay}" x:Name="Books" DefaultText="Category" ItemsSource="{Binding Books}"/>
    private string _title;
    private object _value;
    private bool _isSelected;
    #region ctor
    public Node(string title, object value)
    {
        Title = title;
        Value = value;
    }
    #endregion

    #region Properties
    public string Title
    {
        get
        {
            return _title;
        }
        set
        {
            _title = value;
            NotifyPropertyChanged("Title");
        }
    }

    public object Value
    {
        get { return _value; }
        set
        {
            _value = value;
            NotifyPropertyChanged("Value");
        }
    }

    public bool IsSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            _isSelected = value;
            NotifyPropertyChanged("IsSelected");
        }
    }
    #endregion

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}
<ComboBox ItemsSource="{Binding Books}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}"/>
                <TextBlock Text="{Binding Value.Description}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>