将数组绑定到列表框,以便它在运行时之外显示

时间:2014-10-04 04:23:16

标签: c# wpf data-binding listbox

是否有将代码的C#部分中创建的数组绑定到ListBox以便它在设计时显示?

这样的东西

XAML

<ListBox ItemsSource="{Binding MyStrings}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text={Binding} />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

C#

public string[] MyStrings = new string[] {"A", "B", "C"};

2 个答案:

答案 0 :(得分:1)

运行时DataContext也可以在设计模式下工作。您需要做的就是在单独的ViewModel 中提取代码(这也是MVVM模式推荐的内容),并在那里声明了数组,并简单地将DataContext绑定到ViewModel。

<强> XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainWindowViewModel/>
    </Window.DataContext>
    <StackPanel>
        <ListBox ItemsSource="{Binding MyStrings}"/>
    </StackPanel>
</Window>

<强> 视图模型:

public class MainWindowViewModel
{    
    string[] myStrings = new string[] { "A", "B", "C" };
    public string[] MyStrings
    {
        get
        {
            return myStrings;
        }
    }
}

<强> 设计

enter image description here

答案 1 :(得分:0)

首先需要创建一个自定义类型来存储数据作为其属性,如下所示:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

然后使用类型创建一个列表,如下所示:

List<Student> list1 = new List<Student>()
{
    new Student() { Name = "Bob", Age = 12 },
    new Student() { Name = "John", Age = 30 },
};
<\ n>在XMAL中,执行此操作:

  <Grid>
        <ListBox x:Name="myList" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="2">
                        <TextBlock Text="{Binding Name}"/>
                        <TextBlock Text="{Binding Age}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </Grid>

最后在运行时,初始myList DataContext如下:

myList.DataContext = list1;