【发布时间】:2015-02-25 05:38:13
【问题描述】:
好的,所以这很难解释。
场景:
我有一个 DataGrid 定义如下:
<DataGrid Height="100" Name="test" IsReadOnly="False">
<DataGrid.Columns>
<DataGridTextColumn Header="URL"></DataGridTextColumn>
<DataGridTextColumn Header="PORT"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
它有两个标题,我需要添加数据,我做了很多研究建议使用 ObservableCollection,因为它会触发 DataChanged 事件。
我可以用可能不相关的冗长乏味代码来制定这些数据(您将在下面看到原因)。
问题:
添加了 200 行,但文本本身不在表格中
疑难解答:
我打开了调试,在屏幕截图的帮助下,你可以看到有实际数据,但它不会将它插入到行中,但它会添加行。
相关代码:
ObservableCollection<Proxy> collection = new ObservableCollection<Proxy>();
collection = GetData(ips,ports);
test.CanUserAddRows = true;
test.ItemsSource = null;
test.ItemsSource = collection;
MessageBox.Show("Done");
注意:我添加了 .ItemSource = null;然后将其设置为等于集合,因为这样可以显示行。我试过使用建议的:test.DataContext = collection; 但是,根本没有添加任何行,是的,就像这个测试一样,数据在调试模式下作为上下文/项目源的一部分是可见的。
更新:
我已尝试实现以下 XAML,结果相同
<DataGrid Height="100" Name="test" IsReadOnly="False" ItemsSource="{Binding collection}">
<DataGrid.Columns>
<DataGridTextColumn Header="URL" Binding="{Binding ip}"></DataGridTextColumn>
<DataGridTextColumn Header="PORT" Binding="{Binding port}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
代理类:
public class Proxy
{
public string ip;
public string port;
}
更新 2: 添加 get 和 set 方法时,我的结果如下:
【问题讨论】:
-
你在哪里告诉你的应用程序在列中写入什么?您只需设置 itemssource(如果您问我,您应该在 xaml 中做什么)
-
嗨,你能解释一下吗?您的意思是在 XAML 中创建 DataBindings 吗?
-
您的 DataGridTextColumn 中没有绑定,因此它们不显示任何数据。
-
@PhilipStuyck,如果我有一个 ObservableCollection,我将如何绑定到它还是必须拆分它?
-
已经有 2 个答案大部分重叠。您必须绑定到您的代理成员。您还可以尝试使用 AutogenerateColumns = true。只是为了确保有数据。
标签: c# wpf datagridview rows