您好,我的应用程序有一个类,它得到一串逗号分隔的字符串。所以我创建了一个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().
}
那我该怎么做呢?
我在网上找不到答案。
答案 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;)