我有一个像这样实现的控件:
<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 :(得分: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>
答案 1 :(得分: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的名称。