我是WPF的新手,我试图绑定一个依赖属性 . 我希望我在WPFCtrl上编写的文本:FilterTextBox将在TextBlock中显示
这是我的XAML
xmlns:WPFCtrl="clr-namespace:WPFControls"
xmlns:local="clr-namespace:WpfApplication9"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:Person x:Key="myDataSource" />
</Window.Resources>
<Grid>
<StackPanel>
<StackPanel.DataContext>
<Binding Source="{StaticResource myDataSource}"/>
</StackPanel.DataContext>
<WPFCtrl:FilterTextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged }"/>
<TextBlock Width="55" Height="25" Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Grid>
这里是人类
namespace WpfApplication9
{
public class Person : INotifyPropertyChanged
{
private string name = "";
// Declare the event
public event PropertyChangedEventHandler PropertyChanged;
public Person()
{
}
public Person(string value)
{
this.name = value;
}
public string Name
{
get { return name; }
set
{
name = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("Name");
}
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
和FilterTextBox文本属性
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(FilterTextBox), new PropertyMetadata());
public string Text
{
//get { return _tbFilterTextBox.Text == null ? null : _tbFilterTextBox.Text.TrimEnd(); }
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
//set { _tbFilterTextBox.Text = value; }
}
问题是它没有进入OnPropertyChanged()我做错了什么?
2 回答
这个“FilterTextBox”控件是否每次插入文本时都会更新DP?
我想FilterTextBox有一个带有常规TextBox的ControlTemplate . 就像是
您需要设置内部文本框绑定到Text-Dependcy属性的绑定,以使用UpdateSourceTrigger = PropertyChanged . 否则绑定只会在文本框失去焦点时更新 .
问题是
FilterTextBox
中的TextProperty
默认情况下不绑定TwoWay
.将
BindingMode
设置为TwoWay
或者更改
DependencyProperty
Text
的元数据,以便默认绑定twoway