我有一个像这样的UserControl:
<UserControl x:Class="MySample.customtextbox"
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="20" d:DesignWidth="300">
<Grid>
<TextBox x:Name="Ytextbox" Background="Yellow"/>
</Grid>
</UserControl>
我想在mvvm模式中使用我的控件...我希望我可以将我的viewmodel中的属性绑定到Ytextbox文本属性
<CT:customtextbox ?(Ytextbox)Text ="{binding mypropertyinviewmodel}"/>
......我怎么能这样做?
答案 0 :(得分:5)
您应该在UserControl上创建一个属性,并将其内部绑定到TextBox的文本。
即
<UserControl Name="control" ...>
<!-- ... -->
<TextBox Text="{Binding Text, ElementName=control}"
Background="Yellow"/>
public class customtextbox : UserControl
{
public static readonly DependencyProperty TextProperty =
TextBox.TextProperty.AddOwner(typeof(customtextbox));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
用法:
<CT:customtextbox Text="{Binding mypropertyinviewmodel}"/>
(除非您希望所有希望继承DataContext的外部绑定失败,否则请将UserControl中的DataContext设置为自身,使用ElementName
或RelativeSource
进行内部绑定)< / em>的