1

私はこのように実装されたコントロールを持っています:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10*"/>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>
        <TextBox Grid.Column="0"/>
        <Button Grid.Column="1" Content="Browse..." Margin="5,0,5,0"/>
        <Button Grid.Column="2" Content="Load File" Margin="5,0,5,0"/>
    </Grid>

これは、スタンドアロンコントロールとして使用するように設計されています。Textたとえば、このコントロールのコンシューマーがテキストボックスのプロパティにバインドできるようにするにはどうすればよいですか。独自の依存プロパティを実装して実際のテキストボックスデータを自分で処理する必要がありますか、それともコンシューマーが内部プロパティに直接バインドできるようにする方法はありますか?

4

2 に答える 2

2

これが XAML で他のユーザーが使用することを意図したコントロールである場合は、はい、プロパティを DependencyProperties として公開する必要があります。これにより、コントロールを使用するすべてのユーザーが、コントロールでバインディングなどを使用できるようになります。

public partial class MyControl: UserControl
{
    public static readonly DependencyProperty FileNameProperty = 
           DependencyProperty.Register("FileName ", typeof(string), typeof(MyControl));

    public string FileName
    {
        get 
        {
            return (string )GetValue(FileNameProperty ); 
        }
        set 
        {
            SetValue(FileNameProperty , value); 
        }
    }
}

次に、コントロール マークアップ内の独自のテキスト ボックスを同じプロパティにバインドできます。

<UserControl x:Class="MyControl">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10*"/>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>
        <TextBox Grid.Column="0" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type MyControl}}, Path=FileName}" />
        <Button Grid.Column="1" Content="Browse..." Margin="5,0,5,0"/>
        <Button Grid.Column="2" Content="Load File" Margin="5,0,5,0"/>
    </Grid>
</UserControl>
于 2012-07-17T12:19:16.230 に答える
0

こんにちは、あなたのコントロールでパブリックプロパティを作成します

public string PropertyName
       {
           get{return _propertyName;}
           set{
               _propertyName=value;
                BindingOperations.SetBinding(textboxName,TextBox.TextProperty,new Binding(){Mode=BindingMode.TwoWay,Source=PropertyName})
              }
       }

消費者が単に PropertyName="PropertyToBind" を指定するようにします。これが役立つことを願っています。textboxName は、コントロール TextBox の名前です。

于 2012-07-17T12:06:38.570 に答える