2017-10-13 203 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

相关问题