Wpf 列表框不绑定到多个项目

Wpf Listbox doesn't bind to multiple items

Xaml 看起来像这样:

<ListBox Name="lbEurInsuredType" HorizontalContentAlignment="Stretch" ItemsSource="{Binding}">
                <ListBox.ItemTemplate>
                   <DataTemplate>
                    <Grid Margin="0,2">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="80"></ColumnDefinition>
                                      <ColumnDefinition Width="30"></ColumnDefinition>
                                <!--     <ColumnDefinition Width="20"></ColumnDefinition>-->
                   </Grid.ColumnDefinitions>
                   <TextBlock Text="{Binding Title}"></TextBlock>
                             <TextBox Text="{Binding Uw}"></TextBox>
                        <!--    <TextBox Text="{Binding Partner}"></TextBox>-->
                </Grid>
            </DataTemplate></ListBox.ItemTemplate>

        </ListBox>

然后在我后面的代码中有:

public DefaultSettings()
        {
            InitializeComponent();
            List<EurItem> items = new List<EurItem>
            {
                new EurItem() { Title = "Couple", Uw = 190m, Partner = 170m },
                new EurItem() { Title = "Family", Uw = 180m, Partner = 160m } 
            };

            lbEurInsuredType.ItemsSource = items;

        }

如果我在xaml中只有TextBlock,那么列表框就会显示标题,一旦我开始介绍其他成员,它就会显示最后一项绑定并释放所有其他人。

这是不必要的,因为您已经在后面的代码中直接设置了它。

ItemsSource="{Binding}"

此外,您没有对后续元素设置任何 Grid.Column 定义。所以他们互相重叠。

你可能想要这样的东西

<Grid Margin="0,2">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="80"></ColumnDefinition>
          <ColumnDefinition Width="30"></ColumnDefinition>
          <ColumnDefinition Width="20"></ColumnDefinition>
         </Grid.ColumnDefinitions>
         <TextBlock Text="{Binding Title}"></TextBlock>
         <TextBox Text="{Binding Uw}" Grid.Column="1"></TextBox>
         <TextBox Text="{Binding Partner}" Grid.Column="2"></TextBox>
</Grid>

您要将多个控件放置在具有多个列的 Grid 中。默认情况下,您放置在 Grid 中的每个项目都显示在第一行和第一列中。

由于您没有以其他方式告诉控件,所有控件都被添加到第一行和第一列,彼此重叠...因此只显示最后一个控件。

您需要使用Grid.Column指定每个控件应该放在哪一列。

<ListBox Name="lbEurInsuredType" HorizontalContentAlignment="Stretch" ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80"></ColumnDefinition>
                    <ColumnDefinition Width="30"></ColumnDefinition>
                    <ColumnDefinition Width="20"></ColumnDefinition>
               </Grid.ColumnDefinitions>
               <TextBlock Text="{Binding Title}"></TextBlock>
               <TextBox Text="{Binding Uw}" Grid.Column="1"></TextBox>
               <TextBox Text="{Binding Partner}" Grid.Column="2"></TextBox>
           </Grid>
       </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>