Sliverlight onetime,单项绑定,双向绑定的问题(附实验代码)使用datagrid绑定一个数据源。
ObservableCollection<SLModelCategory> ListCategory = new ObservableCollection<SLModelCategory>();
dataGrid1.ItemsSource = ListCategory;其中ListCategory中的SLModelCategory类实现了INotifyPropertyChanged,部分代码:
  public int ID
        {
            set
            {
                _id = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("ID"));
                }
            }
            get { return _id; }
        }dataGrid1中绑定代码如下:
<sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn Binding="{Binding Mode=OneTime, Path=ID}" CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" IsReadOnly="False" />
打印数据源信息:
private void button2_Click(object sender, RoutedEventArgs e)
        {
            string s = "";
            foreach (var item in ListCategory)
            {
                s += item.ID.ToString();
            }            textBlock1.Text = s;
        }

然后,当我在datagrid上直接修改数据后,再打印数据源,发现,数据源也改变了。
无论我用的是onetime,oneway,twoway,都是一样的结果。求解释。

解决方案 »

  1.   

    使用datagrid绑定一个数据源。
    ObservableCollection<SLModelCategory> ListCategory = new ObservableCollection<SLModelCategory>();
    dataGrid1.ItemsSource = ListCategory;哥们你这每次都被实例化了
    呢来的数据源啊
      

  2.   

    你的OneTime只是指一个字段而已,但是这个字段会改变dataGrid1,这另外绑定着数据源。想好好编程,那么全都是用声明语法,对于datagrid1也使用Binding语法来说明。不要一会儿用声明,一会儿写代码,自己也写糊涂了。这正高水平的设计师,不必写代码时就不去写代码。