![](/img/trans.png)
[英]C# WPF DataGrid is not updated when binded to the DataTable programatically
[英]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
BMFileName
和BMDesc
属性设置器不应设置自己的值,因为它将生成一个无限循环,使您的应用程序崩溃。 您应该改为重视私人成员:
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.