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



我对这种数据绑定的东西很陌生。但我不知道我做错了什么。我有一个简单的表单,上面有一个数据网格。我创建了一个类的可观测集合。类只是两个属性。我绑定到observalecollection,数据网格显示了所显示的数据。所以这是有效的,但如果我想通过双击单元格来更改数据网格中的值。当我按下回车键时,它就崩溃了。

这是代码

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的集合函数中。错误表明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;
}
}
}

最新更新