locked
DataForm绑定的问题,向各位求教。 RRS feed

  • 问题

  • 正在尝试http://silverlight.net/learn/learnvideo.aspx?video=187317 中介绍的DataForm绑定方法,出现了意想不到的问题。

     [Bindable(true, BindingDirection.TwoWay)]
    不能被vs识别。

    查msdn得知,Bindable是System.ComponentModel 命名空间下的一个类。但不知为何,始终提示“无法识别该类,没有引用命名空间“,但已经using该空间。

    请问,如何解决此问题?
    2009年7月27日 10:23

答案

  • 你好,
    这个属性在RTW中去掉了.你看的视频是针对Beta版本的.

    Attributes

    In the Silverlight 3 Beta new attributes were introduced, that were to help you easily work with data. One of them was the Bindable attribute. Its purpose was to annotate if a property of a business object should be auto-generated in the UI and should it be editable:

    //The proeprty Username can be auto-generated in the UI,
    //but is not editable, because of the one way binding.
     
    [Bindable (true, BindingDirection.OneWay)] 
    public string Username 
    {
        get;
        set;
    }

    The attribute is now removed from the final release and its functions are taken by the Display and Editable attributes – the first one can annotate if the property should be auto-generated in the UI and the second annotates if the property should be read-only in the UI:

    //The Username property can be auto-generated in the UI.
    [ Display( AutoGenerateField = true ) ]
    //The Username property is read only.
    [ Editable( false ) ]
    public string Username 
    {
        get;
        set;
    }



    http://www.silverlightshow.net/items/Silverlight-3-RTW-overview.aspx
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月29日 10:36

全部回复

  • 你好,弱弱的问一下 你是否添加了对System.dll的引用(这个在创建项目的时候一般会自动添加上引用的)
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 2:46
  • 怪就怪在这里,视频上演示时,他引用了一个System.ComponentModel 的独立dll。
    但是msdn中,包括vs2008中都找不到这个dll。
    至于System.dll肯定引用啦。
    另外我翻遍了silverlight的各个版本的sdk,均没有发现此dll。
    2009年7月28日 6:02
  • 你好 这个System.ComponentModel命名空间在System.dll中 http://msdn.microsoft.com/zh-cn/library/system.componentmodel(VS.80).aspx
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 6:34
  • 你好,目前已经引用了System.dll,但无法确认问题原因。
    所以仔细观察了视频中的引用部分,发现除了System.ComponentModel.DataAnnotations,
    还有一个System.ComponentModel,版本是2.0的。

    所以,目前我只能怀疑这个原因。

    以下是代码,请看看在你那里是否识别。

    using System;
    using System.ComponentModel;
    using System.Collections;


    namespace SiteManageClient
    {

        [Bindable(true)]
        public class test : IEditableObject
        {
            private string name;
            private string address;
            private DateTime birthday;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }
           
            public string Address
            {
                get { return address; }
                set { address = value; }
            }      

            public DateTime Birthday
            {
                get { return birthday; }
                set { birthday = value; }
            }


        }

    }

    2009年7月28日 6:48
  • 你好 System.ComponentModel.DataAnnotations这是.net 3.5里边的 System.ComponentModel.DataAnnotations 你安装3。5没?
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 6:51
  • 当然啦,vs2008指定安装呀。
    2009年7月28日 6:53
  • 这可能是你没安装3.5 sp1所致哈
    安装sp1就可以了


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 7:05
  • 老兄...我没那么弱...如果sp1都不装,那sl根本安装不上。
    2009年7月28日 7:06
  • 汗 我现在很少使用3.5的东西,所以不是很清楚 我电脑没装,3。5 以及3.5 sp1的 但是都装上了的

    但是我安装了Silverlight 3.0 以及Blend 3后都有这个dll的 以及3.5里边也有的

    我再我电脑上搜索下 在 Silverlight3.0 sdk blend3里边都有
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 7:10
  • 你有System.ComponentModel.dll?看看引用里,如果有麻烦兄弟给我发一份
    2009年7月28日 7:13
  • 有的 你加我msn china.raymond@hotmail.com
    我的再SDK里边就有 C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Libraries\Client
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 7:15
  • 客户端的System.ComponentModel 在System.Windows.Data.dll里。

    这个是Silverlight SDK里安装的,和.Net 3.5 的不是同一个。

    位置在\Program Files\Microsoft SDKs\Silverlight\v3.0\Libraries\Client\
    默认目录里就有的。
    2009年7月28日 7:18
  • 确实有这个空间,尝试引用后,仍无法识别。
    后观察这个组件发现没有BindableAttribute 这个类,推测可能是重名的空间。
    不知是否还有其他方法?
    2009年7月28日 7:24
  • 这个我也有,但没有System.ComponentModel.dll这个组件。
    2009年7月28日 7:27
  • BindableAttribute 在System.dll里边就有

    指定成员是否通常用于绑定。无法继承此类。

    命名空间:System.ComponentModel
    程序集:System(在 system.dll 中)

     
    [AttributeUsageAttribute(AttributeTargets.All)] 
    public sealed class BindableAttribute : Attribute


    你那段代码在我这里也是可以成功的 除了没有实现接口外


    而System.ComponentModel 里边只有这些
    namespace System.ComponentModel
    {
        public class EntityAction
    
        public interface IEditableCollection
    
        public interface IEditableCollection<T> : IEditableCollection
    
        public interface IEditableCollectionView
    
        [DefaultMember("Item")]
        public interface IIndexableCollection : IEnumerable
    
        [DefaultMember("Item")]
        public interface IIndexableCollection<T> : IIndexableCollection, IEnumerable<T>, IEnumerable
    
        public interface IPagedCollection
    
        public interface IPagedCollectionView
    
        public enum NewItemPlaceholderPosition
    
        public sealed class PageChangedEventArgs : EventArgs
    
        public sealed class PageChangingEventArgs : CancelEventArgs
    
        [CompilerGenerated, GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), DebuggerNonUserCode]
        internal class PagedCollectionViewResources
    
        internal static class TypeHelper
    }
    
    namespace System.Windows.Data
    {
        public abstract class CollectionViewGroup : INotifyPropertyChanged
    
        internal class CollectionViewGroupInternal : CollectionViewGroup
    
        internal class CollectionViewGroupRoot : CollectionViewGroupInternal, INotifyCollectionChanged
    
        public delegate GroupDescription GroupDescriptionSelectorCallback(CollectionViewGroup group, int level)
    
        [DefaultMember("Item")]
        public sealed class PagedCollectionView : ICollectionView, IEnumerable, INotifyCollectionChanged, IPagedCollectionView, IEditableCollectionView, INotifyPropertyChanged
    
        public class PropertyGroupDescription : GroupDescription
    }
    


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 7:28
  • [Bindable] 应该就是System.dll里的,建议你把其他的不相关的dll删掉。
    2009年7月28日 7:35
  • 呵呵,有点绕圈子了。
    BindableAttribute 是在System.dll中,但不知道为什么,已经引用了但还无法识别[Bindable(true)]。
    所以观察http://silverlight.net/learn/learnvideo.aspx?video=187317 区别时发现,
    他的演示时,引用了一个System.ComponentModel.dll组件。
    但在我的本机上并没有这个组件,后解压sl的各个版本后,均未发现这个组件。

    所以,现在不知是不是这个组件的原因,如果有我想试试看。或者看看是不是其他原因。下面是源代码,请有空的兄弟测试一下,是否提示未引用命名空间。
    using System;
    using System.ComponentModel;
    using System.Collections;
    
    
    namespace SiteManageClient
    {
    
        [Bindable(true)]
        public class test : IEditableObject
        {
            private string name;
            private string address;
            private DateTime birthday;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            
            public string Address
            {
                get { return address; }
                set { address = value; }
            }      
    
            public DateTime Birthday
            {
                get { return birthday; }
                set { birthday = value; }
            }
    
    
        }
    
    }
    

    2009年7月28日 7:35
  • 你好 你现在这些代码 无需引用其他组件都可以的


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月28日 7:37

  • System.TypeLoadException: 未能从程序集“System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”中加载类型“System.ComponentModel.BindableAttribute”。
       位于 System.Windows.Controls.DataForm.GenerateFields()
       位于 System.Windows.Controls.DataForm.OnAutoGenerateFieldsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
       位于 System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object newValue, Object oldValue)
       位于 System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isSetByStyle, Boolean isSetByBuiltInStyle, PropertyInvalidationReason reason)
       位于 MS.Internal.FrameworkCallbacks.SetValueCustom(IntPtr nativeRoot, IntPtr nativeTarget, UInt32 propertyId, String attrValue, CValue& propertyValue, Int32 typeIndex, Boolean isSetByStyle, Boolean isSetByBuiltInStyle, PropertyInvalidationReason reason) [Line: 0 Position: 0]
       --- Inner Exception ---
    未能从程序集“System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”中加载类型“System.ComponentModel.BindableAttribute”。
    2009年7月28日 7:43
  • [AttributeUsageAttribute(AttributeTargets.All)]
    在我这里也识别了,可以正常编译。
    2009年7月28日 7:51
  • 你好,
    这个属性在RTW中去掉了.你看的视频是针对Beta版本的.

    Attributes

    In the Silverlight 3 Beta new attributes were introduced, that were to help you easily work with data. One of them was the Bindable attribute. Its purpose was to annotate if a property of a business object should be auto-generated in the UI and should it be editable:

    //The proeprty Username can be auto-generated in the UI,
    //but is not editable, because of the one way binding.
     
    [Bindable (true, BindingDirection.OneWay)] 
    public string Username 
    {
        get;
        set;
    }

    The attribute is now removed from the final release and its functions are taken by the Display and Editable attributes – the first one can annotate if the property should be auto-generated in the UI and the second annotates if the property should be read-only in the UI:

    //The Username property can be auto-generated in the UI.
    [ Display( AutoGenerateField = true ) ]
    //The Username property is read only.
    [ Editable( false ) ]
    public string Username 
    {
        get;
        set;
    }



    http://www.silverlightshow.net/items/Silverlight-3-RTW-overview.aspx
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年7月29日 10:36