【问题标题】:Edit item in GridView doesn't workGridView 中的编辑项目不起作用
【发布时间】:2013-05-02 06:03:22
【问题描述】:

我正在创建一个显示所有员工的GridView,我可以选择其中一名员工并单击编辑按钮直接进入编辑页面,所选员工的所有属性都绑定到TextBox ComboBox .更改属性后,单击保存按钮回到GridView 页面。但是,GridView 中的员工信息没有改变。我的Employee类实现了INotifyPorpertyChanged接口,GridView的ItemsSource是ObservableCollection

编辑页面中控件的绑定方式为双向绑定。

在我的MainPage构造函数中,代码如下:

public MainPage()
    {
        this.InitializeComponent();
        MyGridView.ItemsSource = Employees;  
    }

这是编辑按钮单击事件处理程序:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        emp= MyGridView.SelectedItem as Employee;
        if (emp!= null)
        {
            Frame.Navigate(typeof(EditPage), emp);
        }
    }

这是保存按钮单击事件处理程序:

private void Button_Click(object sender, RoutedEventArgs e)
    {            
        Frame.Navigate(typeof(MainPage));
    }

有人可以帮忙吗?

【问题讨论】:

  • 向我展示您的两个页面的 Page_Load 事件...谢谢

标签: c# xaml gridview windows-8


【解决方案1】:

您是否检查过更改的信息是否到达了对应的属性?

如果是这样:触发事件?是否附加了事件处理程序?

克里斯托夫

【讨论】:

  • 调试后发现对象中的属性发生了变化,但是回到MainPage时,MainPage的构造函数再次运行,创建了一个新的ObservableCollection实例,所以属性又变回来了,怎么解决?
  • 你不应该在你的控件中实例化你的数据绑定集合。那应该在您的 ViewModel(模型)中。将您的数据与您的 ui 分开应该可以解决您的问题。
  • 如果我弄错了什么。您可以发布更多代码以进行澄清。比如你的控件背后的代码。
【解决方案2】:

您的Page.IsPostback好像有问题,在Page_Load事件中使用Page.IsPostbackPage的属性

protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack)
      {
       // Put your code here..
      }
    }

您的值已更改,但是当您的页面再次加载时,它会变为旧值,因为我认为您的 Page_Load.Use ISPostback 页面中没有 Page.IsPostback 属性,您的问题将得到解决。更多知识请查看MSDN Document

希望它有效。

【讨论】:

    【解决方案3】:

    有两点需要注意: - 确保当您保存在编辑页面上时,信息存储在确切的存储中(数据库等) - 当您导航回 MainPage 时,您正在加载您保存的最新信息来填充您的视图模型。

    但是,在窗口 8 中,当您在公共文件夹中构建了 BindableBase.cs 类时,为什么还要选择 INotifyPorpertyChanged。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多