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

3

我正在使用以下的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 的值时,数据上下文没有更新。
我做错了什么?

4
你实现了 INotifyPropertyChanged 接口吗? - riteshmeher
1
riteshmeher 是正确的。您还可以使用实现此功能的 ObservableCollection<Point3D> - Sebastian Siemens
所以你正在编辑文本框,但是 set 方法没有被调用? - paparazzo
3个回答

2

谢谢,那就是我忘记的。 - Philipp

2

如果你在谈论Point3D结构体
是的,它有XYZ公共属性,但我不认为它实现了INotifyPropertyChanged接口。


只需在其上放置一个实现了INotifyPropertyChanged接口的包装类(或结构体)即可。 - paparazzo
谢谢,那就是我刚刚做的 :) - Philipp

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");
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接