【发布时间】:2013-01-15 20:12:54
【问题描述】:
我在使用 WPF 自定义控件时遇到了一些问题,我正在尝试让它工作,但就是不明白:
这是我的问题,我正在创建一个与 TextBox 几乎相同的简单自定义控件。该控件有一个名为“Texto”的依赖属性,并且自定义控件的 XAML 和后台代码之间的绑定工作正常,代码如下:
<UserControl x:Class="WpfCustomControlLibrary1.UserControl1"
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="47" d:DesignWidth="147">
<Grid Height="43" Width="142">
<TextBox Height="23" HorizontalAlignment="Left" Margin="12,8,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Texto}"/>
</Grid>
以及依赖属性代码:
public static readonly DependencyProperty TextoProperty = DependencyProperty.Register("Texto", typeof(string), typeof(UserControl1));
public string Texto
{
get
{
return (string)GetValue(TextoProperty);
}
set
{
SetValue(TextoProperty, value);
}
}
好的,现在的问题是:当我在其他窗口中使用此控件时,我尝试将“Texto”属性绑定到视图模型(与其他所有内容一样简单),但视图模型上的属性不会改变:
ViewModel 代码:
public class ViewModelTest
{
public string SomeText { get; set; }
}
以及应用窗口的代码:
public ViewModelTest test;
public Window1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, RoutedEventArgs e)
{
MessageBox.Show(test.SomeText);
MessageBox.Show(uc.Texto);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
test = new ViewModelTest();
this.DataContext = test;
}
以及与视图模型的属性的绑定:
<my:UserControl1 HorizontalAlignment="Left" Margin="27,12,0,0" Name="uc" VerticalAlignment="Top" Texto="{Binding Path=SomeText,Mode=TwoWay}"/>
为了更清楚,如果我在自定义控件中写“Hello”,然后按下“button1”,第一条消息什么也不显示,第二条消息显示“Hello”。
如您所见,我对此很陌生,所以我希望你们中的一些人可以帮助我。谢谢。
【问题讨论】: