2016-12-07 17 views
0

問題を正しく説明できることを願っています。 私は、ObservableCollectionオブジェクトにバインドされたDataGridと、DataGridの選択された項目にバインドされたTextBoxを持っています。 私はプログラム的にSelectedItemプロパティの値(名前)を変更すると、私のTextBoxのテキスト値が更新されていません!ここDataGridにバインドされたTextBoxを更新してください

<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; } 
    } 
関連する問題