WPF将observablecollection绑定到列表框

时间:2014-08-07 19:21:50

标签: wpf xaml listbox observablecollection

我有一点问题,我不知道如何解决它。我有一个名为Points的类,它有一个可观察的System.Windows Point集合。 它看起来像这样:

public class Points
{
    public Points()
    {
        MyPoints = new ObservableCollection<Point>();
        InitWithValues();
    }

    public ObservableCollection<Point> MyPoints { get; set; }

    private void InitWithValues()
    {
        MyPoints.Add(new Point(1, 2));
        MyPoints.Add(new Point(3, 4));
    }
}

现在我想把这个集合放在一个带有文本框的列表框中的usercontrol上。 这是xaml:

<Grid Background="Gainsboro">
    <ListBox Name="Box">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Background="Gainsboro">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBox 
                             Text="{Binding x}"
                             Grid.Column="0"
                             MinWidth="30" />
                    <TextBox Grid.Column="1" 
                             Text="{Binding y, Mode=TwoWay,   UpdateSourceTrigger=PropertyChanged}"
                             MinWidth="30"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

背后的代码:

public partial class MainWindow
{
    public Points points { get; set; }
    public ObservableCollection<Point> DataPoints { get; set; } 
    public MainWindow()
    {
        InitializeComponent();
        points = new Points();
        DataPoints=new ObservableCollection<Point>();
        foreach (Point point in points.MyPoints)
        {
            DataPoints.Add(point);
        }
        Box.ItemsSource = DataPoints;
        DataContext = this;
    }
}

当我运行这段代码时,我得到一个有两行的窗口 - 每行一个,每行有两个文本框 - 用于x和y。但文本框是空的,我不知道我做错了什么(每个文本框应该包含x - 左侧文本框和y - 右侧文本框的一个点)..... here is a print screen with the result < / p>

有人可以给我一个建议吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

属性名称 区分大小写 。您绑定到 x 而不是 X yY也是如此。

将绑定中的属性名称更改为:

Text="{Binding X}"

Text="{Binding Y}"