2

如果 acombobox在 aDataTemplate中,则表示 a 的项目ItemsControl。如何在combobox不进行硬编码的情况下填充项目?从代码隐藏中访问combobox它的名称是不可能的,我什至不喜欢这种方法。

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ComboBox x:Name="aComboBox" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

是否有一种标准方法来填充combobox来自外部数据存储的 ' 值?

4

1 回答 1

2

这是一个有点讨厌的解决方法,但是您是否考虑过在提供相关列表数据的每项数据源上添加一个属性?这不需要复制任何东西 - 它可以引用底层数据源,例如:

public class MyItemViewModel
{
    public IList<string> ComboBoxItems { get { return MySource.ItemList; } }
    ...
}

ItemsControl然后,您可以从项目模板绑定到此。

这仅在您有一个仅用作项目的数据源的类时才有效 - 如果您直接绑定到底层模型对象,这不太实用。但是,出于各种原因,添加额外的层(例如,ViewModel 层)通常是个好主意。

或者,您能否通过命名资源提供数据?您可以编写DataContext={StaticResource myData}可以使您摆脱引用 item 的数据上下文的问题。

于 2013-02-05T15:06:09.293 回答