Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# '';编辑项';此视图不允许使用;尝试编辑DataGrid中的项目时_C#_.net_Wpf_Datagrid - Fatal编程技术网

C# '';编辑项';此视图不允许使用;尝试编辑DataGrid中的项目时

C# '';编辑项';此视图不允许使用;尝试编辑DataGrid中的项目时,c#,.net,wpf,datagrid,C#,.net,Wpf,Datagrid,因此,当我双击一个项目来编辑我的datagrid中的值时,我会不断收到错误消息 此视图不允许使用“EditItem” 看起来是这样的 我以前从未遇到过这种情况,所以我不知道该怎么处理。 是什么导致了这一问题,以及如何正确处理这一问题,因此我知道今后如何处理这一问题。 我试着在谷歌上查看它,但它都有列表要做,因为我没有使用列表,所以我看不到与我的应用程序的连接 XAML 获取和设置值的我的类 public class ServerProperties { public string P

因此,当我双击一个项目来编辑我的datagrid中的值时,我会不断收到错误消息

此视图不允许使用“EditItem”

看起来是这样的

我以前从未遇到过这种情况,所以我不知道该怎么处理。 是什么导致了这一问题,以及如何正确处理这一问题,因此我知道今后如何处理这一问题。 我试着在谷歌上查看它,但它都有列表要做,因为我没有使用列表,所以我看不到与我的应用程序的连接

XAML

获取和设置值的我的类

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;
}