Silverlight 5-如何使用XAML中的普通CLR对象作为CommandParameter?

Silverlight 5-如何使用XAML中的普通CLR对象作为CommandParameter?,silverlight,xaml,parameters,command,clr,Silverlight,Xaml,Parameters,Command,Clr,如果可能的话,我想知道在XAML中使用简单的C#CLR对象作为命令参数,就像我使用MarkupExtensions一样 例如,我使用自己的标记扩展,如下所示: public class FormOpenExtension : MarkupExtension { public eForm e { get; set; } public override object ProvideValue(IServiceProvider serviceProvider)

如果可能的话,我想知道在XAML中使用简单的C#CLR对象作为命令参数,就像我使用MarkupExtensions一样

例如,我使用自己的标记扩展,如下所示:

public class FormOpenExtension : MarkupExtension
    {
        public eForm e { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
CommandParameter="{gui:FormOpen e=Login}
namespace DB
{
    [DataContract(IsReference = true)]
    public partial class User
    {
        #region Primitive Properties

        [Key][DataMember]
        public virtual int ID
        {
            get;
            set;
        }

        [DataMember]
        public virtual string Name
        {
            get;
            set;
        }
}
}
CommandParameter="{db:User ID=1, Name=Foo}
在XAML中使用MarkupExtension如下所示:

public class FormOpenExtension : MarkupExtension
    {
        public eForm e { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
CommandParameter="{gui:FormOpen e=Login}
namespace DB
{
    [DataContract(IsReference = true)]
    public partial class User
    {
        #region Primitive Properties

        [Key][DataMember]
        public virtual int ID
        {
            get;
            set;
        }

        [DataMember]
        public virtual string Name
        {
            get;
            set;
        }
}
}
CommandParameter="{db:User ID=1, Name=Foo}
在XAML中,我完全支持FormOpenExtension对象的intellisense,编译没有问题。所以这就像一个符咒

--------------------------------------- 现在,我有了一个简单的CLR对象,例如如下所示:

public class FormOpenExtension : MarkupExtension
    {
        public eForm e { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
CommandParameter="{gui:FormOpen e=Login}
namespace DB
{
    [DataContract(IsReference = true)]
    public partial class User
    {
        #region Primitive Properties

        [Key][DataMember]
        public virtual int ID
        {
            get;
            set;
        }

        [DataMember]
        public virtual string Name
        {
            get;
            set;
        }
}
}
CommandParameter="{db:User ID=1, Name=Foo}
我可以将名称空间导入XAML并使用对象,包括intellisense,如下所示:

public class FormOpenExtension : MarkupExtension
    {
        public eForm e { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
CommandParameter="{gui:FormOpen e=Login}
namespace DB
{
    [DataContract(IsReference = true)]
    public partial class User
    {
        #region Primitive Properties

        [Key][DataMember]
        public virtual int ID
        {
            get;
            set;
        }

        [DataMember]
        public virtual string Name
        {
            get;
            set;
        }
}
}
CommandParameter="{db:User ID=1, Name=Foo}
VisualStudio说,我像使用MarkupExtension一样使用用户对象,但它不是

我完全理解这个问题。普通用户对象不是扩展

我不明白的是,如何使用用户对象作为命令参数,而不编写自己的扩展

下面是我的两个具体问题:

1.)是否可以在XAML中使用我自己的对象,而不将它们包装到扩展中

2.)如果是,命令参数的正确语法是什么

多谢各位

---------------------------------- 好的,谢谢你,迪米特里。以下是解决方案,因为它现在对我有效:

步骤1)导入名称空间

xmlns:db="clr-namespace:DB"
步骤2)将CLR对象用作静态资源

<UserControl.Resources>
   <db:User x:Key="User"/>
</UserControl.Resources>
步骤4)将用户对象绑定到UserConrol中所需的控件

Text="{Binding Source={StaticResource User}, Path=EMail, Mode=TwoWay}"
就是这样。

若我理解了这个问题,可以帮助找到解决方案

p、 简单地将对象声明为资源,然后通过
StaticResource
扩展使用它怎么样

<Resources>
     <DB:User Id="1" Name="Name" x:Key="User"/>
</Resources>


谢谢。如果对我有帮助的话,我会通读这篇文章并发表评论。正如我所说的,我需要这个对象作为CommandParameter,但我不知道它的语法。太好了,这是可行的。是否可以将用户对象的Name属性绑定到文本框?Like:CommandParameter=“{StaticResource User,Name=Textbox}”您应该使用ViewModel和转换器来实现您的逻辑。这将是最好的办法。请参阅MVVM模式。