首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在将normal属性转换为依赖属性

正在将normal属性转换为依赖属性
EN

Stack Overflow用户
提问于 2015-10-13 15:20:59
回答 4查看 811关注 0票数 5

我有一个用于我的新应用程序的控件。这个控件本身就有一个常规属性。

代码语言:javascript
运行
复制
    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

编辑:

所以,经过多次尝试,我终于到了这个阶段。

代码语言:javascript
运行
复制
    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

这是依赖属性。此属性仍不具有约束力。绑定的输出窗口中不显示任何错误。

代码语言:javascript
运行
复制
Text="{Binding RelativeSource={RelativeSource Self}, Path=Value, Mode=TwoWay}"

这是我的绑定方法。我不知道我还能做什么。至少如果有一个错误,我可以找出一些东西。没有任何错误,我在这里只是一只无头鸡。

EN

回答 4

Stack Overflow用户

发布于 2015-10-13 15:35:55

有关所有依赖项基础http://www.wpftutorial.net/dependencyproperties.html的信息,请参阅以下url

基本上,您可以通过提供一个FrameworkPropertyMetadata来获取依赖属性的属性更改事件。

代码语言:javascript
运行
复制
new FrameworkPropertyMetadata( [Default Value], 
                   OnCurrentTimePropertyChanged);

您可以在事件处理程序中取回目标控件(DependencyObject),并在那里实现您的逻辑

代码语言:javascript
运行
复制
private static void OnCurrentTimePropertyChanged(DependencyObject source, 
    DependencyPropertyChangedEventArgs e)
{
    AutoCompleteTextBox control = source as AutoCompleteTextBox;
    string time = (string)e.NewValue;
    // Put some update logic here...
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-13 15:42:04

在控件中声明依赖属性是一件好事。

您可以在xaml中进行一些绑定(对不起,我没有您的XAML -我想是这样的)。

类似于:

代码语言:javascript
运行
复制
<TextBox  x:Name="AutoCompleteTextBox" 
          Text="{Binding RelativeSource={RelativeSource=Self},Path=Value}"/>

问候

票数 0
EN

Stack Overflow用户

发布于 2015-10-13 15:44:36

TextBox有一个名为Text的属性。当您访问文本属性时,它将为您提供在TextBox中输入的文本。你的情况也是如此。那么为什么要将其转换为DP呢?如果您想要将此DP绑定到某个其他控件,则DP将非常有用。

扩展此控件本身。创建一个新的控件并引入这个新的DP。

而要将此属性绑定到某个控件的地方则使用DP。然后,根据绑定模式设置,从控件更新此属性或从此DP更新控件。

如何进行绑定:

代码语言:javascript
运行
复制
    <TextBox x:Name="UserInput" />
    <uc:MyAutoCompleteTextBox ValueDP="{Binding Text, ElementName=UserInput, Mode=OneWay}" />

MyAutoCompleteTextBox是从旧的AutoComplete控件扩展(继承)的新控件。

如果您想要应用一些过滤逻辑或其他任何东西,您可以将其应用于DP本身,如下所示:

代码语言:javascript
运行
复制
Get
    someVariable = TryCast(Me.GetValue(ValueProperty), String)
    ' apply somg logic to someVariable
    ' use your old Value property from here
    Return someVariable
End Get

net上有很多WPF绑定教程。

我推荐:http://blog.scottlogic.com/2012/04/05/everything-you-wanted-to-know-about-databinding-in-wpf-silverlight-and-wp7-part-one.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33096475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档