【问题标题】:Displaying a data-bound StackPanel inside a DataTemplate在 DataTemplate 中显示数据绑定的 StackPanel
【发布时间】:2009-06-05 19:42:22
【问题描述】:

我有对象数据绑定到 WPF 中的 ListBox。最终结果应该是这样的:

------------------------------------------- |姓名 |选项1 |价值1 | | |选项 2 |价值2 | | |选项 3 |价值3 | | |选项 4 |价值4 | -------------------------------------------

基本上我有一个用于整体变量的 DataTemplate,然后 Opt/Value 组合有它自己的 DataTemplate。我正在尝试尽可能简单地显示值列表。

<Label Content="{Binding Path=Identifier.Name, Mode=OneWay}" />
<ListView Grid.Column="1" HorizontalAlignment="Stretch" 
          ItemsSource="{Binding Path=Values, Mode=OneWay}" />

Values 的绑定目前只有一个 &lt;Grid&gt; 和 2 个 &lt;Label&gt;,而 ListView 有很多我不看的功能,比如边框样式、选择等等,而我真正想要的只是能够使用列表进行数据绑定。

我尝试将项目数据绑定到堆栈面板,但无法使其在 XAML 中工作。我想另一种解决方案是做我正在做的事情,并为 ListView 重写&lt;Style&gt;。对正确的方法有什么建议吗?

【问题讨论】:

    标签: c# wpf xaml listbox stackpanel


    【解决方案1】:

    这听起来确实像是您可以使用 ListBox 或 ItemsControl 如果您不希望它们是可选的。我们还可以使用IsSharedSizeScope 附加属性来保持我们的列格式化和均匀。另外,请查看 ListBox 链接底部的 Inheritance Higharchy,它应该可以帮助您确定不同场景所需的列表类型。

    试试这样的:

    <DockPanel>
      <Label Content="{Binding Path=Identifier.Name, Mode=OneWay}" />
      <ListBox ItemsSource="{Binding Path=Values, Mode=OneWay}"
               Grid.IsSharedSizeScope="True">
        <ListBox.ItemTemplate>
          <DataTemplate>
            <Grid>
              <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="OptionColumn" />
                <ColumnDefinition SharedSizeGroup="ValueColumn" />
              </Grid.ColumnDefinitions>
              <TextBlock Grid.Column="0" Text="{Binding Option}" />
              <TextBlock Grid.Column="1" Text="{Binding Value}" />
            </Grid>
          </DataTemplate>
        </ListBox.ItemTemplate>
      </ListBox>
    </DockPanel>
    

    【讨论】:

    • ItemsControl 正是我所需要的。谢谢。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-11-14
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多