2016-12-07 126 views
0

我希望我能正確解釋我的問題。 我有一個DataGrid綁定到一個ObservableCollection對象,並綁定到我的數據網格的選定項目的文本框。 當我以編程方式修改SelectedItem屬性值(名稱)時,我的TextBox文本值不更新! 這裏是我的設計代碼:更新TextBox綁定到DataGrid

<DataGrid Name="grid" HorizontalAlignment="Left" Margin="119,28,0,0" VerticalAlignment="Top" Height="237" Width="200" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="nom" Binding="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

    <TextBox Name="textbox" Text="{Binding ElementName=grid, Path=SelectedItem.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="18" Margin="119,276,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/> 
    <Button Content="Button" HorizontalAlignment="Left" Margin="392,54,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> 

,這裏是我的代碼背後:

ObservableCollection<Element> obs; 

    class Element 
    { 
     public string Name { get; set; } 
     public Element(string name) { Name = name; } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     obs = new ObservableCollection<Element>() { new Element("element2"), new Element("element2"), new Element("element3")}; 
     grid.ItemsSource = obs; 

    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     var sel = grid.SelectedItem as Element; 
     sel.Name = "something"; 
     grid.Items.Refresh(); //this updates the selected element to "something" but does nothing to the textbox 
    } 

回答

0

問題解決了。

無論何時修改模型,我都必須觸發PropertyChanged事件。 這裏是我的新代碼:

class Element : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     string name; 

     public string Name 
     { 
      get 
      { 
       return name; 
      } 
      set 
      { 
       name = value; 
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name")); 
      } 
     } 
     public Element(string name) { Name = name; } 
    } 
相關問題