您能否在 WPF XAML 中的 ObservableCollection 中的对象上访问字典 属性?

Can you access a Dictionary property on an object that is in an ObservableCollection in WPF XAML?

我有一个带有包含网格的 ItemsControl 的视图。 ItemsControl 绑定到 ObservableCollection。
每个事物都有以下属性:名称(字符串)、值(字符串)、位置字典(tabid(字符串)、位置)

每个位置都有以下属性:Col(int)、Row(int)、TabId(string)、IsVisible(bool)

视图位于 WPF 用户控件的选项卡中。

  1. 是否可以在 XAML 中使用 Thing 上的字典来确定行和列以将 Thing 放置在 ItemsControl.ItemContainerStyle Setter 中?

    <ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="Grid.Row" Value={Binding Path=LocationsDictionary[thisTabId].Row}" />
        <Setter Property="Grid.Column" Value={Binding Path=LocationsDictionary[thisTabId].Col}" />
    </Style>
    

  2. thisTabId 变量是否可以在视图级别设置并在 ItemsControl 中的绑定路径中使用?

这里的目标是能够将Things放置在网格中,它只能存在一次,但可以存在于具有相同View的其他选项卡上。我有一些东西在一个网格上工作,在 Thing 上有 Row 和 Col,但是当应用于第二个网格时,Things 最终在每个 grid/tab 上的同一个地方。事物 2 最终位于每个选项卡上的相同网格单元格位置。

字典是我们想出的一种方法,可以为事物提供多个位置属性,因此它可以存在于不同位置的多个选项卡上。

你不能在纯 XAML 中做这样的事情,除非 thisTabId 是一个常数:

{Binding Path=LocationsDictionary[thisTabId].Row}

换句话说,thisTabId 不能是随 ItemsControl 中的每个项目而变化的动态值。如果你想这样做,你可以使用一个 multi value converter 绑定到 LocationsDictionary 属性 和 thisTabId 属性 和 returns LocationsDictionary[thisTabId].RowLocationsDictionary[thisTabId].Column.