2013-06-30 2 views
3

Я видел на нескольких сообщениях, как динамически добавлять и удалять элементы из DataGrid в Silverlight 4, но я ищу способ обновить только поле существующей Линии. Значение ячейки инициализируется значением «OUI», когда я нажимаю кнопку, его нужно изменить на «NON». Мой код успешно обновляет коллекцию, но DataGrid показывает начальное значение, пока я вручную не нажму на ячейку.Как обновить поле в Silverlight 4 Datagrid?

Вот мой XAML

<sdk:DataGrid x:Name="dtg" HorizontalAlignment="Left" Height="155" Margin="10,21,0,0" VerticalAlignment="Top" Width="380" AutoGenerateColumns="False" GridLinesVisibility="Horizontal" > 
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn Binding="{Binding Lettrage, Mode=TwoWay}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" HeaderStyle="{x:Null}" Header="Lettrage" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 
    <Button Content="Button" HorizontalAlignment="Left" Margin="70,235,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/> 

И мой код За:

public MainPage() 
{    
    InitializeComponent(); 

    // Fill the datagrid 
    source.Add(new Ligne()); 
    dtg.ItemsSource = source; 
} 

private void Button_Click_1(object sender, RoutedEventArgs e) 
{  
    string src = source.First().Lettrage; 
    source.First().Lettrage = src == "OUI" ? "NON" : "OUI";   
} 

Можно ли это сделать? Спасибо заранее.

ответ

2

Ваш DataItem (The Ligne Class) должен реализовывать System.ComponentModel.INotifyPropertyChanged:

public class Ligne: INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private string _lettrage; 
    public string Lettrage 
    { 
     get { return _lettrage; } 
     set 
     { 
      _lettrage = value; 
      OnPropertyChanged("Lettrage"); 
     } 
    } 
} 
+0

Работает отлично! благодаря –

Смежные вопросы