WPF列表框绑定到列表<;字符串>;或列表<;字符串[]>; 我对WPF(特别是XAML)非常陌生*

WPF列表框绑定到列表<;字符串>;或列表<;字符串[]>; 我对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

您好,我的应用程序有一个类,它得到一堆逗号分隔的字符串。所以我制作了一个列表集合来存储字符串。此外,我还为listbox制作了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}"/>
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