WPF中的数组值绑定

时间:2015-04-17 16:07:03

标签: c# arrays wpf xaml

我有一个带有双精度数组的对象,如下所示:

private double[] _axes;

public double[] Axes
{
    get
    {
        return _axes;
    }
    set
    {
        _axes = value;
        if (PropertyChanged != null)
        {
            NotifyPropertyChanged("Axes[]");
        }
    }
}

此数组总是作为一个整体分配,因为我得到一个数据库对象的双重数组,并将其设置为Axes属性,如下所示:

object.Axes = GetDataRow(i);

(这只是为了证明我实际上分配了整个数组)

现在我在我的XAML中绑定它:

 <Label  Content="{Binding Path=Axes[0], UpdateSourceTrigger=PropertyChanged}"

我将窗口的DataContext设置为具有Axes属性的Object,并且UI在程序启动时从它接收一个值,我在对象的构造函数中分配。 然而,即使&#34; Axes []&#34;事件不断引发(我从另一个对象检查),没有其他值到达UI。

所以我的问题是:这甚至可以工作吗? Axes[]Axes[0]不对应吗?可能是什么问题?

3 个答案:

答案 0 :(得分:2)

通知中的商标名称不正确

if (PropertyChanged != null)
{
     NotifyPropertyChanged("Axes");
}

删除括号。在这种情况下,这应解决您的问题。但是,建议使用ObservableCollection绑定对象列表。

答案 1 :(得分:0)

没有

您没有名为Axes[]的属性,因此该事件无效。

你不应该绑定到数组;相反,使用ObservableCollection,并将属性设为只读。

答案 2 :(得分:0)

绑定系统不会在数组中“进入”更新。您只需要通知它属性本身已更改。您当前正在说一个名为Axes[]的属性已更改,但您没有具有该名称的属性。这只是Axes

public double[] Axes
{
    get
    {
        return _axes;
    }
    set
    {
        _axes = value;
        if (PropertyChanged != null)
        {
            NotifyPropertyChanged("Axes");
        }
    }
}

如果您确实需要知道阵列中的单个项目是否正在发生变化,那么您应该使用ObservableCollection,绑定系统 知道如何“进入”。