对象和组合框列表

时间:2016-08-22 12:57:01

标签: c# wpf xaml combobox binding

这是我的问题: 我有这些课程:

public class CsvField
{
    public string Content { get; set; }

    public CsvField(string content)
    {
        Content = content;
    }

}

public class CsvLine
{
    public List<CsvField> Fields = new List<CsvField>();

    public int LineNumber;

}

public static class Settings
{
    public static List<string> Tags = new List<string>();
    public static CsvLine AllHeaders = new CsvLine();
}

我想要做的是显示包含Settings.AllHeaders.Fields的每个成员的ListBox和包含Settings.Tags列表的所有成员的ComboBox(水平放置 - 左边的AllHeaders成员和旁边的ComboBox )。所以,如果我有4个标题,我会得到这4个标题和4个组合框的列表,每个标题旁边都有一个标题。这些ComboBox中的每一个都包含一个标签列表。

所以,我定义了一个DataTemplate:

<Window x:Class="CSV_To_Tags_App.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:loc="clr-namespace:CSV_To_Tags_App"
        Title="Window2" Height="435" Width="566">

    <Window.Resources>
        <DataTemplate DataType="{x:Type loc:CsvField}">
            <StackPanel Orientation="Horizontal">
                <TextBlock x:Name="HeaderTextBlock" HorizontalAlignment="Left" TextWrapping="Wrap"
                       VerticalAlignment="Top" Text="{Binding Content}"
                />
                <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="120"/>

            </StackPanel>
        </DataTemplate>                      
    </Window.Resources>


    <Grid>

        <Label Content="Available headers" HorizontalAlignment="Left"
               VerticalAlignment="Top"/>
        <ListBox x:Name="HeadersListtListBox"  HorizontalAlignment="Left" 
                 Height="254" Margin="36,104,0,0" VerticalAlignment="Top" Width="452"
                 ItemsSource="{Binding}"/>       
    </Grid>
</Window>

现在,上面的XAML代码不完整,因为我不知道如何: 1.将TextBlock绑定到Settings.AllHeaders.Fields.Content
2.将ComboBox绑定到标签列表

1 个答案:

答案 0 :(得分:0)

@ MD提供的链接确实为您在问题中提出的问题提供了解决方案,但您必须重新安排一些事情才能看到它。 下面的XAML将为您提供您所要求的内容,假设您正在绑定的类已正确设置用于数据绑定(实现INotifyPropertyChanged接口)。这个网站上有很多关于如何正确实现该部分的例子。

<Window x:Class="CSV_To_Tags_App.Window2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:CSV_To_Tags_App"
    Title="Window2" Height="435" Width="566">
 <Grid>
   <StackPanel Orientation="Horizontal">
    <ItemsControl ItemsSource="{Binding Path=Settings.AllHeadings.Fields}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
              <TextBlock Text="{Binding Path=Content}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <ItemsControl ItemsSource="{Binding Path=Settings}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
              <ComboBox ItemsSource="{Binding Path=Tags}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
  </StackPanel>
 </Grid>
</Window>