2016-06-07 78 views
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生成的很好,但是当我尝试更改文本框的值时,Datacontext未更新。

我在做什么错?

+4

您实现了INotifyPropertyChanged接口? – riteshmeher

+1

riteshmeher是对的。你也可以使用'ObservableCollection '来实现这个。 –

+0

因此,您正在编辑TextBox并且该集合未被调用? – Paparazzi

回答

2

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

+0

因此,只需在其上实施一个包装类(或结构),实现INotifyPropertyChanged – Paparazzi

+0

坦克,这就是我刚刚做的:) –

2

也许你忘了在模型或视图模型类中实现接口INotifyPropertyChanged

+0

谢谢,这就是我忘了。 –

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"); 
      } 
     } 
    } 
} 
相关问题