2016-06-07 77 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"); 
      } 
     } 
    } 
} 
相關問題