C# '';编辑项';此视图不允许使用;尝试编辑DataGrid中的项目时
因此,当我双击一个项目来编辑我的datagrid中的值时,我会不断收到错误消息 此视图不允许使用“EditItem” 看起来是这样的 我以前从未遇到过这种情况,所以我不知道该怎么处理。 是什么导致了这一问题,以及如何正确处理这一问题,因此我知道今后如何处理这一问题。 我试着在谷歌上查看它,但它都有列表要做,因为我没有使用列表,所以我看不到与我的应用程序的连接 XAML 获取和设置值的我的类C# '';编辑项';此视图不允许使用;尝试编辑DataGrid中的项目时,c#,.net,wpf,datagrid,C#,.net,Wpf,Datagrid,因此,当我双击一个项目来编辑我的datagrid中的值时,我会不断收到错误消息 此视图不允许使用“EditItem” 看起来是这样的 我以前从未遇到过这种情况,所以我不知道该怎么处理。 是什么导致了这一问题,以及如何正确处理这一问题,因此我知道今后如何处理这一问题。 我试着在谷歌上查看它,但它都有列表要做,因为我没有使用列表,所以我看不到与我的应用程序的连接 XAML 获取和设置值的我的类 public class ServerProperties { public string P
public class ServerProperties
{
public string Property { get; set; }
public string Value { get; set; }
}
您应该将
DataGrid
的ItemsSource
属性设置为实现IList
界面的集合,以便能够编辑项目:
var list = new List<ServerProperties> { ... };
dgItems.ItemsSource = list;
因此,您应该稍微修改代码:
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;
}
private void btnStart\u单击(对象发送方,路由目标)
{
字符串路径=”;
OpenFileDialog ofd=新建OpenFileDialog();
ofd.Filter=“属性|*.Properties”;
if(ofd.ShowDialog()==true)
{
path=ofd.FileName;
}
List serverProperties=new List();
使用(StreamReader sr=新StreamReader(路径))
{
弦线;
而((line=sr.ReadLine())!=null)
{
如果(!line.StartsWith(“#”)
{
string[]line=line.Split('=');
字符串属性=行[0];
字符串值=行[1];
添加(新的serverProperties{Property=Property,Value=Value});
打印($“属性:{Property}值:{Value}”);
}
}
}
dgItems.ItemsSource=serverProperties;
}
哦,数据网格就是这样工作的!您需要用列表填充它们,然后您可以更改该列表!这是有道理的!但还有一个问题是保存新值。是否有一个事件用于更改项时,我可以处理它?当属性设置为新值时,将调用其setter。因此,您可以根据需要在其中引发任何事件。例如,当属性设置为新值时,将调用其setter。您的意思是,每次我更改值时,它都会“重新加载”ClickEvent吗?否。您确切地想在何时保存?每次编辑单元格后保存没有意义。
var list = new List<ServerProperties> { ... };
dgItems.ItemsSource = list;
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;
}