WPF列表框绑定到List <string>或List <string []> </string []> </string>

时间:2014-01-12 06:43:36

标签: wpf data-binding collections listbox

  • 我是WPF(尤其是XAML)*
  • 的新手

您好,我的应用程序有一个类,它得到一串逗号分隔的字符串。所以我创建了一个List集合来存储字符串。另外,我为列表框制作了DataTemplate。这是代码。

MainWindow.xaml

...
<DataTemplate x:Key="DataTemplate">
    <Grid>
        <StackPanel Grid.Column="1" Margin="5">
            <StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold" >
                <TextBlock Text="{Binding AAA}" />
            </StackPanel>
            <TextBlock Text="{Binding BBB}" />
            <TextBlock Text="{Binding CCC}" />
        </StackPanel>
    </Grid>
</DataTemplate>
...
<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="309" Margin="10,10,0,0" Width="216" BorderThickness="1" VerticalAlignment="Top" ItemTemplate="{DynamicResource HeadlineDataTemplate}"/>

MainWindow.xaml.cs

...
MyClass myClass;

public MainWindow()
{
    InitializeComponent();
    myClass = new MyClass();
}
...
private void Button_Click(object sender, RoutedEventArgs e)
{
    myClass.getData(Textbox1.Text); // I want to convert this to add items to listbox1.
}

MyClass.cs

...
public void getData(string target)
{
    List<string> itemList = new List<string>();
    ...
    while(result != null)
    {
        // This loop gives bunch of comma separated string (more than 100)
        itemList.Add(result);
    }
    // after the loop, itemList has
    // itemList[0] = {"AAA1,BBB1,CCC1"}
    // itemList[1] = {"AAA2,BBB2,CCC2"}
    // itemList[2] = {"AAA3,BBB3,CCC3"}
    // ...
    // I also can store the strings to List<string[]> using string.split().

}

那我该怎么做呢?

我在网上找不到答案。

2 个答案:

答案 0 :(得分:2)

我建议创建一个模型类来表示每个ListBox项。在此示例中,我将其命名为MyListBoxItemModel

public class MyListBoxItemModel
{
    public string AAA { get; set; }
    public string BBB { get; set; }
    public string CCC { get; set; }
}

然后在getData函数中,创建列表MyListBoxItemModel为listbox1的ItemsSource

public void getData(string target)
{
    List<MyListBoxItemModel> itemList = new List<MyListBoxItemModel>();
    ...
    while(result != null)
    {
        var splittedResult = result.Split(',');
        itemList.Add(new MyListBoxItemModel{ 
                                AAA = splittedResult[0], 
                                BBB = splittedResult[1], 
                                CCC = splittedResult[2] 
                            });
    }
    listbox1.ItemsSource = itemList;
}

请注意,此示例仅演示了在ListBox中显示数据所需的最少代码量。不涉及WPF开发的各种技术和最佳实践,例如实现INotifyPropertyChanged接口,MVVM模式等。

答案 1 :(得分:1)

你可以绑定到公共属性,所以如果你写了类似

的东西
 <TextBlock Text="{Binding BBB}" />

你需要一个公共财产“BBB”的对象。

所以除了har07的答案之外,你还应该使用公共财产作为你的清单(OberservableCollection)

 public OberservableCollection<MyListBoxItemModel> ItemList {get;set;}

然后你对itemscontrol的绑定看起来像这样

<ListBox ItemsSource="{Binding ItemList}" ItemTemplate="{DynamicResource HeadlineDataTemplate}"/>

现在你需要的只是正确的datacontext;)