none
Dictionary<string, object>绑定的问题 RRS feed

  • 问题

  • 有以下数据类:

     public class TestDataInfo :  INotifyPropertyChanged
        {
            #region properties pack

            /// <summary>
            ///
            /// </summary>
            private string test;
            /// <summary>
            ///
            /// </summary>
            public string Test
            {
                get { return test; }
                set { test = value; NotifyPropertyChanged("Test"); }
            }
            #endregion

     

            #region INotifyPropertyChanged
            /// <summary>
            ///
            /// </summary>
            public event PropertyChangedEventHandler PropertyChanged;

            /// <summary>
            ///
            /// </summary>
            /// <param name="info"></param>
            private void NotifyPropertyChanged(String info)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(info));
                }
            }
            #endregion

            #region structure
            /// <summary>
            ///
            /// </summary>
            public TestDataInfo()
            { }

            /// <summary>
            ///
            /// </summary>
            public TestDataInfo(string name)
            {

            }
            #endregion
        }

    我增加以下代码:

    Dictionary<string, object> dic = new Dictionary<string, object>();

     TestDataInfo testDataInfo = new TestDataInfo();

    testDataInfo.Test ="test===" ;

     dic.Add("test", testDataInfo);

     Binding testBinding = new Binding();
     testBinding.Mode = BindingMode.TwoWay;
     testBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
     testBinding.Path = new PropertyPath("["test"]");
     testBinding.Source = dic;

    上面的代码绑定之后显示的只是testDataInfo.toString();

    我想要的结果是绑定testDataInfo的test属性的值(例如:test===),请问各位大侠怎么写这个绑定方法?


    2011年7月27日 9:32

答案

全部回复

  • 我写了一个笨一点的方法,就是在TestDataInfo 类里面增加以下方法可以实现我想要的Test属性的值

      public override string ToString()
            {
                return test;
            }

    这个虽然能得到test属性的值,但是属性的类型都变为字符类型了;如果是一个int类型,或者DateTime类型的话就会有问题,而且绑定的错误验证也需要手动来写了。所以这个方法也不是好方法,看哪位大侠有什么好的办法。非常感谢。


    2011年7月27日 9:36
  • 请哪位高手帮我看看这个问题。
    2011年7月28日 11:26
  • 你绑定了TestDataInfo ,在你使用键值对进行取值的时候,可以先转换成TestDataInfo ,然后从里面取出你想要的Test 应该就可以了吧.

    2011年7月28日 11:44
  • 我是要建立绑定关系,之后不再写转换代码。我绑定对象是Dictionary,而不是Dictionary的value的数据结构TestDataInfo,路径是key,然后返回的是value(TestDataInfo)数据结构中的某一个值。

    2011年7月29日 0:59
  • 你好,

    只需要进一步指定Path到具体属性路径就可以解决这个问题。

    例如

     testBinding.Path = new PropertyPath("[test].Test");
    


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 xxyxxb2080 2011年7月29日 8:12
    2011年7月29日 7:16
    版主
  • 谢谢Min Zhu的回答,没想到这么简单就解决了;居然这种写法也可以实现绑定关系,感觉绑定真是神奇,O(∩_∩)O哈哈~。同时也证明我对绑定不是很了解。得加强学习。。。

    2011年7月29日 8:14