【发布时间】:2013-04-01 18:33:39
【问题描述】:
我有一个添加电影窗口:
private void button1_Click(object sender, RoutedEventArgs e)
{
string name = txtName.Text;
string genre = txtGenre.Text;
bool dubbed = checkBox1.IsChecked.Value;
bool is3d = checkBox2.IsChecked.Value;
MessageBox.Show(name + " " + genre);
var main = new MainWindow();
main.CallbackAddMovie(name, genre, dubbed, is3d);
this.Close();
}
还有回调:
public class DataItem
{
public string name { get; set; }
public string genre { get; set; }
public bool dubbed { get; set; }
public bool is3d { get; set; }
}
public void CallbackAddMovie(string mname, string mgenre, bool mdubbed, bool mis3d)
{
dataGrid1.Items.Add(new DataItem { name = "Movie name2", genre = "Action", dubbed = true, is3d = true });
dataGrid1.Items.Add(new DataItem { name = mname, genre = mgenre, dubbed = mdubbed, is3d = mis3d });
dataGrid1.SelectAll();
}
当我添加电影时,我会看到消息框,但数据网格中不会包含新项目。 穿什么?
编辑:
这是我创建的数据网格:
var colname = new DataGridTextColumn();
colname.Header = "Name";
colname.Binding = new Binding("name");
dataGrid1.Columns.Add(colname);
var colgenre = new DataGridTextColumn();
colgenre.Header = "Genre";
colgenre.Binding = new Binding("genre");
dataGrid1.Columns.Add(colgenre);
var coldubbed = new DataGridCheckBoxColumn();
coldubbed.Header = "Dubbed";
coldubbed.Binding = new Binding("dubbed");
dataGrid1.Columns.Add(coldubbed);
var col3d = new DataGridCheckBoxColumn();
col3d.Header = "3D";
col3d.IsReadOnly = true;
col3d.Binding = new Binding("is3d");
dataGrid1.Columns.Add(col3d);
// create and add two lines of fake data to be displayed, here
dataGrid1.Items.Add(new DataItem { name = "Movie name", genre = "Action", dubbed = true, is3d = true });
编辑:
完整项目:
MainWindow.cs:
http://pastebin.com/Xrr6DjuH
MainWindow.xaml:
http://pastebin.com/SJS4akU4
添加电影:
http://pastebin.com/J7C5ub8N
【问题讨论】:
-
请显示您的数据网格的 xaml 代码
-
@AntonSemenov,我已经添加了。
-
@agam360 老兄,你的代码太可怕了。学习 MVVM。不要像使用 Winform 一样使用 WPF。
-
您的代码与 WPF 的意识形态相矛盾,但它是有效的代码,它应该可以工作。你确定只调用一次创建代码吗?
-
@AntonSemenov,是的,您想在 paste bin 上查看整个项目吗?
标签: c# wpf wpfdatagrid