可能であれば、MarkupExtensions で行うように、XAML で単純な C# CLR オブジェクトをコマンド パラメーターとして使用する方法を知りたいです。
たとえば、次のような独自のマークアップ拡張機能を使用します。
public class FormOpenExtension : MarkupExtension
{
public eForm e { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
XAML で MarkupExtension を使用すると、次のようになります。
CommandParameter="{gui:FormOpen e=Login}
XAML では、 FormOpenExtension Object の完全な IntelliSense サポートがあり、コンパイルは問題ありません。したがって、これは魅力のように機能します。
------------------------------------------------------
これで、たとえば次のような単純な CLR オブジェクトができました。
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;
}
}
}
名前空間を XAML にインポートして、次のように IntelliSense を含むオブジェクトを使用できます。
CommandParameter="{db:User ID=1, Name=Foo}
Visual Studio によると、MarkupExtension のような User オブジェクトを使用していますが、それはありません。
私は問題を完全に理解しています。プレーンなユーザー オブジェクトは拡張機能ではありません。
私が得られないのは、独自の拡張機能を作成せずに、ユーザー オブジェクトをコマンド パラメーターとして使用する方法です。
だからここに私の2つの具体的な質問があります:
1.) 拡張機能にラップせずに、XAML で独自のオブジェクトを使用することは可能ですか?
2.) はいの場合、コマンド パラメータの正しい構文は何ですか?
ありがとうございました。
----------------------------------
わかりました、ありがとうディミトリ。それが今私のために働いたので、これが解決策です:
ステップ 1) 名前空間をインポートする
xmlns:db="clr-namespace:DB"
ステップ 2) CLR オブジェクトを静的リソースとして使用する。
<UserControl.Resources>
<db:User x:Key="User"/>
</UserControl.Resources>
手順 3) オブジェクト キー (この場合はユーザー) を CommandParameter に渡します。
CommandParameter="{StaticResource User}
手順 4) ユーザー オブジェクトを UserConrol 内の目的のコントロールにバインドします。
Text="{Binding Source={StaticResource User}, Path=EMail, Mode=TwoWay}"
それでおしまい。