C# WPF - Listview Binding not working
我一直试图在WPF中创建一个窗口,并将ListView绑定到对象列表,但我无法使列表中的对象显示在ListView中。
以下是窗口的XAML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <Window x:Class="WpfApplication.window_ManageInstruments" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="window_ManageInstruments" Height="400" Width="600" WindowStartupLocation="CenterOwner"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="100" /> <RowDefinition /> </Grid.RowDefinitions> <ListView Grid.Row="1" Margin="5" Name="listInstruments" ItemsSource="{Binding InstrumentList}"> <ListView.View> <GridView> <GridViewColumn Width="120" Header="Symbol" DisplayMemberBinding="{Binding Field1}"/> <GridViewColumn Width="200" Header="Description" DisplayMemberBinding="{Binding Field2}"/> <GridViewColumn Width="120" Header="Last Stats" DisplayMemberBinding="{Binding Field3}"/> <GridViewColumn Width="100" Header="Margin" DisplayMemberBinding="{Binding Field4}"/> </GridView> </ListView.View> </ListView> <Label HorizontalAlignment="Left" Margin="10,10,0,0" Name="label1" Width="120" Height="25" VerticalAlignment="Top">Symbol</Label> <Label HorizontalAlignment="Left" Margin="10,40,0,0" Name="label2" Width="120" Height="25">Description</Label> <TextBox Height="25" Margin="150,10,0,0" Name="txtSymbol" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120" /> <TextBox Margin="150,40,0,0" Name="txtDescription" HorizontalAlignment="Left" Width="120" Height="25" /> <Button Height="23" HorizontalAlignment="Right" Margin="0,12,133,0" Name="btn_AddInstrument" VerticalAlignment="Top" Width="75">Add</Button> </Grid> |
下面是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Xml; using WpfApplication.classes; using System.Collections.ObjectModel; namespace WpfApplication { /// /// Interaction logic for window_ManageInstruments.xaml /// public partial class window_ManageInstruments : Window { public ObservableCollection InstrumentList = new ObservableCollection(); public window_ManageInstruments() { this.DataContext = this; InstrumentList.Add(new TestClass { Field1 ="A", Field2 ="B", Field3 ="C", Field4 ="D" }); InstrumentList.Add(new TestClass { Field1 ="E", Field2 ="F", Field3 ="G", Field4 ="H" }); InitializeComponent(); } } public class TestClass { public string Field1 { get; set; } public string Field2 { get; set; } public string Field3 { get; set; } public string Field4 { get; set; } } } |
我不知道这里是否缺少任何重要的配置,所以任何帮助都将非常感谢。
提前谢谢。
我认为你的工具列表应该是一个属性。把它改成
1 2 3 4 | private ObservableCollection _instrumentList = new ObservableCollection(); public ObservableCollection InstrumentList{ get{ return _instrumentList;} } |
当您将代码更改为以下代码时,它是否工作?
1 2 3 4 5 6 7 |
将InstrumentList声明更改为属性。
1 | public ObservableCollection<TestClass> InstrumentList { get; set; } |
并在构造器上添加下一行
1 |
它应该可以工作,集合将绑定到ListView。
注意-我这里使用的是通用集合,您可以根据需要进行更改。
只能绑定到属性而不能绑定到变量。