我有一个控件,我正在使用我的新应用程序。此控件具有常规属性。
Public Property Value() As String
Get
If AutoCompleteTextBox.SearchText Is Nothing Then
Return String.Empty
Else
Return AutoCompleteTextBox.SearchText.ToString.Trim
End If
End Get
Set(value As String)
AutoCompleteTextBox.SearchText = value
End Set
End Property
编辑:
所以,经过多次尝试,我终于到了这个阶段。
Public Shared ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox))
Public Property Value() As String
Get
Return Me.GetValue(ValueProperty).ToString
End Get
Set(value As String)
Me.SetValue(ValueProperty, value)
End Set
End Property
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
这是依赖属性。此属性仍然没有约束力。输出窗口中没有显示绑定错误。
Text="{Binding RelativeSource={RelativeSource Self}, Path=Value, Mode=TwoWay}"
这是我的绑定方法。我不知道我还能做什么。至少如果出现错误,我本可以找到一些东西。没有任何错误,我只是一个没头的鸡。
答案 0 :(得分:0)
请参阅以下网址了解所有依赖关系基础知识 http://www.wpftutorial.net/dependencyproperties.html
基本上,您可以通过提供FrameworkPropertyMetadata来获取依赖项属性的属性更改事件。
new FrameworkPropertyMetadata( [Default Value],
OnCurrentTimePropertyChanged);
你可以在事件处理程序中取回目标控件(DependencyObject)并在那里实现你的逻辑
private static void OnCurrentTimePropertyChanged(DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
AutoCompleteTextBox control = source as AutoCompleteTextBox;
string time = (string)e.NewValue;
// Put some update logic here...
}
答案 1 :(得分:0)
在控件中声明依赖项属性是一件好事。
你可以在xaml中做一些绑定(抱歉,我没有你的XAML - 我想象)。
类似的东西:
<TextBox x:Name="AutoCompleteTextBox"
Text="{Binding RelativeSource={RelativeSource=Self},Path=Value}"/>
此致
答案 2 :(得分:0)
TextBox有一个名为Text的属性。当您访问Text属性时,它将为您提供在TextBox中输入的文本。你的情况也一样。现在为什么要将其转换为DP?如果您希望将此DP绑定到其他控件,则DP将非常有用。
扩展此控件本身。制作一个新的控件并介绍这个新的DP。
虽然在要将此属性绑定到某个控件的位置使用DP。然后,根据绑定模式设置,此属性将从控件或控件更新从此DP更新。
如何进行装订:
<TextBox x:Name="UserInput" />
<uc:MyAutoCompleteTextBox ValueDP="{Binding Text, ElementName=UserInput, Mode=OneWay}" />
MyAutoCompleteTextBox是新控件,它从旧的AutoComplete控件扩展(继承)。
如果你想应用一些过滤逻辑或其他任何东西,你可以像这样在你的DP中应用它:
Get
someVariable = TryCast(Me.GetValue(ValueProperty), String)
' apply somg logic to someVariable
' use your old Value property from here
Return someVariable
End Get
网上有很多WPF Binding教程。
答案 3 :(得分:-1)
只需使用以下代码更改您的代码即可,
你的代码
Public Shared ReadOnly ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox))
Public Property Value() As String
Get
Return TryCast(Me.GetValue(ValueProperty), String)
End Get
Set(value As String)
Me.SetValue(ValueProperty, value)
End Set
End Property
新代码
Public Shared ReadOnly ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox))
Public Property Value() As String
Get
If AutoCompleteTextBox.SearchText Is Nothing Then
Return String.Empty
Else
Return AutoCompleteTextBox.SearchText.ToString.Trim
End If
End Get
Set(value As String)
AutoCompleteTextBox.SearchText = value
End Set
End Property
此DP将执行您的旧房产所做的事情。但只要考虑一下你的要求,就可以有更好的方式来编写这些东西。
由于