2012-07-17 42 views
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屬性。我是否需要實現自己的依賴性屬性並自己處理實際的文本框數據,還是有辦法允許消費者直接綁定到內部屬性?

回答

0

嗨使公共財產在你的控制,

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

,讓消費者只需到指定屬性名=「PropertyToBind」。我希望這將是help.textboxName你的控制TextBox的名稱。

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> 
相關問題