2014-06-05 71 views
0

我對WPF(Visual Studio Express 2012)頗爲陌生,並且很多時候,它很酷,但它不像我所期望的那麼容易。感謝stackoverflow和示例和教程,我正在採摘它,但在此我受阻。初始化後無法將行添加到DataGrid

我有一個datagrid,我把它綁定到一個列表,我期望當我添加一些東西到列表中時,它顯示在datagrid中。這發生在MainWindow函數中,但不會在我的代碼中發生,以處理按鈕單擊(當我有一個ListBox時它曾經工作得很好,但ListBox不支持複選框,至少不是本地的,所以我想要將其轉換)。

我想知道this tutorial的旁註是否重要 - 它表示ItemSource引用原始列表,但Items屬性是轉換後的ItemCollection。單擊代碼,我可以看到MyList在單擊按鈕時獲取新項目,但它不會顯示在UI中。

請幫忙!

DataGridClass.cs:

namespace WpfTest 
{ 
    class DataGridClass 
    { 
     public bool CheckboxColumn { get; set; } 
     public string Text1Column { get; set; } 
     public string Text2Column { get; set; } 
    } 
} 

MainWindow.xaml.cs:

namespace WpfTest 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     List<DataGridClass> myList = new List<DataGridClass>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      MyDataGrid.ItemsSource = myList; 

      // this works 
      myList.Add(new DataGridClass() 
      { 
       CheckboxColumn = false, 
       Text1Column = "Initialization", 
       Text2Column = "ABCD" 
      }); 

     } 

     private void MyButton_Click(object sender, RoutedEventArgs e) 
     { 
      // this doesn't work 
      myList.Add(new DataGridClass() 
      { 
       CheckboxColumn = false, 
       Text1Column = "Button Clicked", 
       Text2Column = "1234" 
      }); 
     } 
    } 
} 

MainWindow.xaml:

<Window x:Class="WpfTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Button x:Name="MyButton" Content="Populate Chart" HorizontalAlignment="Left" Margin="75,36,0,0" VerticalAlignment="Top" Width="120" Click="MyButton_Click"/> 
     <DataGrid x:Name="MyDataGrid" HorizontalAlignment="Left" Margin="75,76,0,0" VerticalAlignment="Top" Height="151" Width="349"/> 

    </Grid> 
</Window> 

回答

1

你需要使用ObservableCollection代替List

ObservableCollection<DataGridClass> myList = new ObservableCollection<DataGridClass>(); 

它實現了INotifyCollectionChanged接口,它允許用戶界面獲取對集合所做的更改

+0

是的!這就是訣竅。我曾在幾個地方看過,但我看過的教程使用了List,並沒有提到任何有關這方面的內容。 Thx非常快速回復:) –

相關問題