6

バインド可能なユーザー コントロールを作成する方法を学ぶための簡単なデモを作成しています。私は単純なクラスを作成しました:

class Person
{
    public string firstName;
    public string lastName;    
    public Person(string first, string last)
    {
        firstName = first;
        lastName = last;
    }
}

そして、非常に単純なユーザー コントロール:

<UserControl x:Class="Example.ExampleHRControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <TextBlock x:Name="textFirstName"></TextBlock>
        <TextBlock x:Name="textLastName"></TextBlock>
    </Grid>
</UserControl>

私が知りたいのは、ユーザー コントロールを通常のコントロールのようにコンテキストで使用できるようにするために何をする必要があるかということです。これをに追加できますMainWindow

<local:ExampleHRControl x:Name="Hr1"></local:ExampleHRControl>

そして、コード ビハインドを介してそれに対処し、値を追加できます。

Hr1.textFirstName.Text = "John";
Hr1.textLasttName.Text = "Doe";

Personクラスのインスタンスを作成し、メイン ウィンドウのコントロールをクラスに単純にバインドできるようにしたいと考えていますPerson

4

2 に答える 2

6

これを機能させるために必要なことがいくつかあります。

コード ビハインドで、コントロールに認識させたい Person オブジェクトの依存関係プロパティを追加します。

   public static readonly DependencyProperty PersonProperty =
                          DependencyProperty.Register("Person", typeof(Person),
                                                      typeof(ExampleHRControl));

   public Person Person
   {
      get { return (Person)GetValue(PersonProperty); }
      set { SetValue(PersonProperty, value); }
   }

XAML で、コード ビハインドをデータ コンテキストとして設定し、バインディングを person オブジェクトに追加します。

<UserControl x:Class="Example.ExampleHRControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300"
         x:Name="This">
    <Grid>
        <TextBlock x:Name="{Binding Path=Person.FirstName, ElementName=This}"/>
        <TextBlock x:Name="{Binding Path=Person.LastName, ElementName=This}"/>
    </Grid>
</UserControl>

これで、Person プロパティが設定されるたびに、コントロールは Person に関連付けられている名と姓で更新されます。

于 2012-04-18T21:11:54.890 に答える
2

依存関係プロパティと呼びたいものは、xaml からバインドできます。
1-フィールドを作成する

public static readonly DependencyProperty FirstNameProperty = 
    DependencyProperty.Register(
    "FirstName", typeof(Strin),

2-プロパティを作成する

public String FirstName
{
    get { return (String)GetValue(FirstNameProperty); }
    set { SetValue(FirstNameProperty, value); }
}

3-XAMLで使用してバインドするか、単に使用できます

<local:YourControlName FirstName="john"/>

<local:YourControlName FirstName="{Binding MyFirstName}"/>
  • Resharperを使用すると、きれいなコードを作成し、非常に強力な IntelliSense を使用できます
于 2012-04-18T20:33:53.280 に答える