2017-10-13 88 views
0

因此,當我雙擊項目以編輯我的數據網格中的值時,我不斷收到錯誤消息。''EditItem'不允許用於此視圖。'當試圖編輯DataGrid中的項目時

「EditItem」不允許用於此視圖。'

而且它看起來像這樣 enter image description here

我從來沒有遇到過這樣之前我不知道去處理這個有什麼辦法。 是什麼導致了這個問題,以及處理這個問題的正確方法是什麼,所以我知道將來如何處理它。 我試着在Google上查看它,但它都有列表要做,因爲我沒有使用列表,我無法看到與我的應用程序的連接。

XAML

<DataGrid Name="dgItems"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Property" Binding="{Binding Property}" /> 
      <DataGridTextColumn Header="Value" Binding="{Binding Value}" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

CS

private void btnStart_Click(object sender, RoutedEventArgs e) 
{ 
    string path = ""; 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "Properties | *.properties"; 
    if (ofd.ShowDialog() == true) 
    { 
     path = ofd.FileName; 
    } 
    using (StreamReader sr = new StreamReader(path)) 
    { 
     string line; 
     while ((line = sr.ReadLine()) != null) 
     { 
      if (!line.StartsWith("#")) 
      { 
       string[] lines = line.Split('='); 
       string property = lines[0]; 
       string value = lines[1]; 
       this.dgItems.Items.Add(new ServerProperties { Property = property, Value = value }); 
       Debug.Print($"Property: {property} Value: {value}"); 
      } 
     } 
    } 
} 

我的班級是得到&設置值

public class ServerProperties 
{ 
    public string Property { get; set; } 
    public string Value { get; set; } 
} 

回答

1

您應該DataGridItemsSource屬性設置爲一個集合實現IList界面你可以修改的項目爲:

var list = new List<ServerProperties> { ... }; 
dgItems.ItemsSource = list; 

不要直接添加任何項目到DataGridItems屬性:

dgItems.Items.Add(new ServerProperties()); 

所以,你應該稍微修改代碼:

private void btnStart_Click(object sender, RoutedEventArgs e) 
{ 
    string path = ""; 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "Properties | *.properties"; 
    if (ofd.ShowDialog() == true) 
    { 
     path = ofd.FileName; 
    } 
    List<ServerProperties> serverProperties = new List<ServerProperties>(); 
    using (StreamReader sr = new StreamReader(path)) 
    { 
     string line; 
     while ((line = sr.ReadLine()) != null) 
     { 
      if (!line.StartsWith("#")) 
      { 
       string[] lines = line.Split('='); 
       string property = lines[0]; 
       string value = lines[1]; 
       serverProperties.Add(new ServerProperties { Property = property, Value = value }); 
       Debug.Print($"Property: {property} Value: {value}"); 
      } 
     } 
    } 
    dgItems.ItemsSource = serverProperties; 
} 
+0

哦,這樣的話datagrids是如何工作的!您需要用列表填充它們,然後您可以更改該列表!這就說得通了! –

+0

但是接下來就存在保存新值的問題有沒有什麼事情可以改變,我可以隨時玩耍? –

+0

當一個屬性被設置爲一個新值時,它的setter被調用。所以你可以隨心所欲,例如舉辦一個活動。 – mm8

相關問題