为什么我的Binding只能单向工作?

时间:2016-06-07 15:06:38

标签: c# wpf data-binding binding

我正在使用以下xaml代码:

  <ListView ItemsSource="{Binding Offsets, Mode=TwoWay}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="X" Width="90">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding X, Mode=TwoWay}" 
                                     Width="70"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

(我知道这看起来有点草率,但我试图保持最小化)

我绑定的Offsets属性是public List<Point3D> { get; set;}。 (using System.Windows.Media.Media3D)。

因此每个Point3D都有一个公共的X,Y和Z属性。

我的ListView生成正常,但是当我尝试更改TextBox的值时,Datacontext没有更新。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

可能您忘记在模型或视图模型类中实现接口INotifyPropertyChanged

答案 1 :(得分:2)

如果你在谈论Point3D Structure
是的它有XYZ公共属性但我不认为它实现了INotifyPropertyChanged

答案 2 :(得分:0)

您需要在班级中实现INotifyPropertyChanged接口。你的装订模式很好。你应该能够看到变化。

public class YourClassName: INotifyPropertyChanged
{
 public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
public ObservableCollection<YourModel> Offsets
    {
        get {return this.offsets;}

        set
        {
            if (value != this.offsets)
            {
                this.offsets= value;
                NotifyPropertyChanged("Offsets");
            }
        }
    }
}