繁体   English   中英

更改绑定到ObservableCollection的单元格值时,C#WPF DataGrid会使应用程序崩溃

[英]C# WPF DataGrid crashes app when changing cell value thats binded to an ObservableCollection

我是这个数据绑定人员的新手。 但我不知道我在做什么错。 我有一个简单的表格,上面有一个数据网格。 我创建一个类的一个observablecollection。 该类只是两个属性。 我绑定到observablecollection,并且datagrid显示具有显示的数据。 这样就可以了,但是如果我要更改,请双击单元格以更改数据网格中的值。 当我点击进入它崩溃。

这是代码

namespace TESTDELETE
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Window_Initialized(object sender, EventArgs e)
    {
        ObservableCollection<Basemap> BMList;
        {
            BMList = new ObservableCollection<Basemap>();
            BMList.Add(new Basemap("filename1", "desc1"));
            BMList.Add(new Basemap("filename2", "desc2"));
            BMList.Add(new Basemap("filename3", "desc3"));   
        }
        datagrid1.DataContext = BMList;

    }
}
}

这是我的课

 namespace TESTDELETE
 public class Basemap
{
    private string bmfilename;
    private string bmdesc;
    public Basemap(string filename, string desc)
    {
        this.bmfilename = filename;
        this.bmdesc = desc;
    }
    public string BMFileName {
        get {
            return bmfilename;
        }
        set { 
            BMFileName = value;
        }
    }
    public string BMDesc
    {
        get
        {
            return bmdesc;
        }
        set
        {
            BMDesc = value;
        }
    }

}
}

这是我的XAML

<Window x:Class="TESTDELETE.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" Initialized="Window_Initialized">
<Border BorderBrush="Black" BorderThickness="1">
    <Grid>
        <Button Content="Button" HorizontalAlignment="Left" Margin="339,175,0,0" VerticalAlignment="Top" Width="75"/>
        <TabControl Margin="10">
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5">
                    <DataGrid x:Name="datagrid1" Margin="10" ItemsSource="{Binding}" AutoGenerateColumns="True">
                    </DataGrid>
                </Grid>
            </TabItem>
            <TabItem Header="TabItem">
                <Grid Background="#FFE5E5E5"/>
            </TabItem>
        </TabControl>
    </Grid>
</Border>

错误发生在底图类中。 当尝试更改数据网格中单元格的值时,错误发生在已更改属性的set函数中。 例如,在表单加载后,我更改了包含值desc3的单元格。 错误将在Basemap类的BMDesc的set函数中发生。 该错误表明TESTDELETE.exe中发生了类型为'System.StackOverflowException'的未处理异常

任何帮助都是极好的。

JD

BMFileNameBMDesc属性设置器不应设置自己的值,因为它将生成一个无限循环,使您的应用程序崩溃。 您应该改为重视私人成员:

public class Basemap
{
    private string bmfilename;
    private string bmdesc;

    public Basemap(string filename, string desc)
    {
        this.bmfilename = filename;
        this.bmdesc = desc;
    }

    public string BMFileName
    {
        get
        {
            return bmfilename;
        }
        set
        {
            bmfilename = value;
        }
    }
    public string BMDesc
    {
        get
        {
            return bmdesc;
        }
        set
        {
            bmdesc = value;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM