WPF列表框绑定到列表<;字符串>;或列表<;字符串[]>; 我对WPF(特别是XAML)非常陌生*
您好,我的应用程序有一个类,它得到一堆逗号分隔的字符串。所以我制作了一个列表集合来存储字符串。此外,我还为listbox制作了DataTemplate。这是代码 MainWindow.xamlWPF列表框绑定到列表<;字符串>;或列表<;字符串[]>; 我对WPF(特别是XAML)非常陌生*,wpf,data-binding,collections,listbox,Wpf,Data Binding,Collections,Listbox,您好,我的应用程序有一个类,它得到一堆逗号分隔的字符串。所以我制作了一个列表集合来存储字符串。此外,我还为listbox制作了DataTemplate。这是代码 MainWindow.xaml ... <DataTemplate x:Key="DataTemplate"> <Grid> <StackPanel Grid.Column="1" Margin="5"> <StackPanel Orientati
...
<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}"/>
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().
}
。。。
public void getData(字符串目标)
{
List itemList=新列表();
...
while(结果!=null)
{
//此循环给出一组逗号分隔的字符串(超过100个)
itemList.Add(结果);
}
//循环之后,itemList
//itemList[0]={“AAA1、BBB1、CCC1”}
//itemList[1]={“AAA2,BBB2,CCC2”}
//itemList[2]={“AAA3,BBB3,CCC3”}
// ...
//我还可以使用string.split()存储要列出的字符串。
}
那我该怎么做呢
我在internet上找不到答案。我建议创建一个模型类来表示每个列表框项。在本例中,我将其命名为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;
}
public void getData(字符串目标)
{
List itemList=新列表();
...
while(结果!=null)
{
var splittedResult=result.Split(',');
添加(新的MyListBoxItemModel{
AAA=拆分结果[0],
BBB=拆分结果[1],
CCC=分割结果[2]
});
}
listbox1.ItemsSource=itemList;
}
请注意,此示例仅演示在
列表框中显示数据所需的最小代码量。不涉及围绕WPF开发的各种技术和最佳实践,例如实现INotifyPropertyChanged
接口、MVVM模式等。我建议创建一个模型类来表示每个列表框项。在本例中,我将其命名为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;
}
public void getData(字符串目标)
{
List itemList=新列表();
...
while(结果!=null)
{
var splittedResult=result.Split(',');
添加(新的MyListBoxItemModel{
AAA=拆分结果[0],
BBB=拆分结果[1],
CCC=分割结果[2]
});
}
listbox1.ItemsSource=itemList;
}
请注意,此示例仅演示在
列表框中显示数据所需的最小代码量。不涉及围绕WPF开发的各种技术和最佳实践,例如实现INotifyPropertyChanged
接口、MVVM模式等。我建议创建一个模型类来表示每个列表框项。在本例中,我将其命名为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;
}
public void getData(字符串目标)
{
List itemList=新列表();
...
while(结果!=null)
{
var splittedResult=result.Split(',');
添加(新的MyListBoxItemModel{
AAA=拆分结果[0],
BBB=拆分结果[1],
CCC=分割结果[2]
});
}
listbox1.ItemsSource=itemList;
}
请注意,此示例仅演示在
列表框中显示数据所需的最小代码量。不涉及围绕WPF开发的各种技术和最佳实践,例如实现INotifyPropertyChanged
接口、MVVM模式等。我建议创建一个模型类来表示每个列表框项。在本例中,我将其命名为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;
}
public void getData(字符串目标)
{
List itemList=新列表();
...
while(结果!=null)
{
var splittedResult=result.Split(',');
添加(新的MyListBoxItemModel{
AAA=拆分结果[0],
BBB=拆分结果[1],
CCC=分割结果[2]
});
}
listbox1.ItemsSource=itemList;
}
请注意,此示例仅演示在
列表框中显示数据所需的最小代码量。不涉及围绕WPF开发的各种技术和最佳实践,例如实现INotifyPropertyChanged
接口、MVVM模式等。您可以绑定到公共属性,因此如果您编写类似
<TextBlock Text="{Binding BBB}" />
您需要一个具有公共属性“BBB”的对象
因此,除了har07的答案之外,您还应该为列表使用公共属性(OberservableCollection)
public OberservableCollection ItemList{get;set;}
那么itemscontrol的绑定可以如下所示
<ListBox ItemsSource="{Binding ItemList}" ItemTemplate="{DynamicResource HeadlineDataTemplate}"/>
您现在只需要正确的datacontext;) 您可以只绑定到公共属性,因此如果您编写类似
<TextBlock Text="{Binding BBB}" />
您需要一个具有公共属性“BBB”的对象
因此,除了har07的答案之外,您还应该为列表使用公共属性(OberservableCollection)
public OberservableCollection ItemList{get;set;}
那么itemscontrol的绑定可以如下所示
<ListBox ItemsSource="{Binding ItemList}" ItemTemplate="{DynamicResource HeadlineDataTemplate}"/>
您现在只需要正确的datacontext;) yo