【问题标题】:How can I bind a ListBox control to a List in WPF?如何将 ListBox 控件绑定到 WPF 中的列表?
【发布时间】:2011-07-09 14:21:26
【问题描述】:

我想在列表框和 .NET 列表之间创建 2 路绑定。

在我的 GUI 中,我有一个列表框、一个文本框以及添加和删除按钮。 列表框显示汽车,我的目标是在 .Net 汽车列表和列表框之间创建双向绑定:当用户在文本框中输入汽车时,它只会在 .Net 列表中更新,列表框是自动更新。

当用户按下 GUI 的“移除”按钮时,汽车会从 GUI 中移除,并且 .Net 列表会自动更新。

我已经开始编写 xaml 代码,但发现我实际上并不知道如何在双方(c# 和 xaml)上进行绑定:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="369" Loaded="Window_Loaded">
    <Window.Resources>
        <ObjectDataProvider x:Key="carsData" 
                        ObjectType="{x:Type c:Window1}" />
    </Window.Resources>
    <Grid Width="332">
        <ListBox Margin="10,62,0,100" Name="myListBox" HorizontalAlignment="Left" Width="120" ItemsSource="{Binding Source={StaticResource CarsData}}"/>
        <Button Height="23" Margin="66,0,0,65" Name="addBtn" VerticalAlignment="Bottom" Click="addBtn_Click" HorizontalAlignment="Left" Width="64">add</Button>
        <TextBox Margin="10,0,0,64.48" Name="myTextBox" Height="23" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="47" />
        <Button Height="23" Margin="66,0,0,33" Name="removeButton" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="64" Click="removeButton_Click">Remove</Button>
    </Grid>
</Window>

这是我的 c# 代码:

public partial class Window1 : Window
{
    MyModel listMgr;
    ObservableCollection<Car> carList;

    public Window1()
    {
        InitializeComponent();
        listMgr = new MyModel();
    }

    private void addBtn_Click(object sender, RoutedEventArgs e)
    {
        listMgr.add(new Car(0, myTextBox.Text, 2011));

    }

    private void removeButton_Click(object sender, RoutedEventArgs e)
    {
        //myListBox.Items.RemoveAt(0);
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        carList = listMgr.getList();
        myListBox.DataContext = carList;
        //secondListBox.DataContext = carList;
    }
}

【问题讨论】:

    标签: c# .net wpf listbox binding


    【解决方案1】:

    这是一个快速版本,您需要添加代码以检查是否选择了汽车等。

    要查看您的汽车数据,您需要定义一个数据模板。在示例中它只是一个简单的名称,但您可以更改文本颜色、字体大小、添加更多字段等。

    添加/删除汽车时最好在列表上工作,而不是直接在ListBox上。

    XAML:

    <Window x:Class="cars.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate x:Key="car_template" DataType="Car">
            <TextBlock Text="{Binding name}"/>
        </DataTemplate>
    </Window.Resources>
    <StackPanel>
        <ListBox x:Name="cars_box" Margin="5" ItemsSource="{Binding}" ItemTemplate="{StaticResource car_template}"/>
        <TextBox x:Name="new_car_box" Margin="5"/>
        <Button Content="add" Click="add_car" Margin="5"/>
        <Button Content="delete" Click="delete_car" Margin="5"/>
    </StackPanel>
    

    C#:

    using System.Collections.ObjectModel;
    using System.Windows;    
    public partial class MainWindow : Window
    {
        ObservableCollection<Car> cars = new ObservableCollection<Car>();
        public MainWindow()
        {
            InitializeComponent();            
            cars.Add(new Car("Volvo"));
            cars.Add(new Car("Ferrari"));
            cars_box.DataContext = cars;
        }
    
        private void add_car(object sender, RoutedEventArgs e)
        {
            cars.Add(new Car(new_car_box.Text));
        }
    
        private void delete_car(object sender, RoutedEventArgs e)
        {
            cars.Remove((cars_box.SelectedItem as Car));
        }
    }
    
    public class Car
    {
        public string name { get; set; }
        public Car(string _name)
        {
            this.name = _name;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2014-08-18
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2011-02-22
      • 2012-03-12
      相关资源
      最近更新 更多