【问题标题】:Ivalueconverter not working in phone 8.1 XamlIvalueconverter 在电话 8.1 Xaml 中不起作用
【发布时间】:2015-06-19 19:28:42
【问题描述】:

我在我的 XAML 中使用 Case Converter 作为文本框:

<TextBox Text="{Binding Obj.UserName,Mode=TwoWay,Converter={Binding UpperCaseConverter}}" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" MinWidth="200" x:Name="usernametxtbox"/>

和转换器启动为:

 Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        UpperCaseConverter = New MCCommonCodes.Converters.CaseConverter(MCCommonCodes.Converters.CharacterCase.Lower)
        Me.DataContext = Me
    End Sub
Property UpperCaseConverter As MCCommonCodes.Converters.CaseConverter

转换器的代码是:

Public Class CaseConverter
            Implements IValueConverter
            Property SelectedCase As CharacterCase

            Public Sub New(ByVal ConvertCase As CharacterCase)
                SelectedCase = ConvertCase
            End Sub

            Public Function Convert(value As Object, targetType As Type, parameter As Object, language As String) As Object Implements IValueConverter.Convert
                Dim str As String = CType(value, String)
                If Not value = Nothing Then
                    Select Case SelectedCase
                        Case CharacterCase.Lower : Return str.ToLower
                        Case CharacterCase.Normal : Return str
                        Case CharacterCase.Upper : Return str.ToUpper
                        Case Else : Return str
                    End Select
                Else
                    Return ""
                End If
            End Function

            Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, language As String) As Object Implements IValueConverter.ConvertBack
                Throw New NotImplementedException
            End Function
        End Class

        Public Enum CharacterCase
            Lower = 0
            Upper = 1
            Normal = 2
        End Enum

问题是大小写转换不起作用,请您纠正我或建议我哪里出错了。

编辑: 修改后的 Xaml 代码,转换器定义为静态资源:

xmlns:cc="using:MCPhone81.MCCommonCodes.Converters"
 <Page.Resources>
        <cc:CaseConverter x:Key="lowercaseconverter" SelectedCase="Lower"/>
    </Page.Resources>
    <TextBox Text="{Binding Obj.UserName,Mode=TwoWay,Converter={StaticResource lowercaseconverter}}" />

属性代码:

Property UserName As String
                Get
                    Return _UserNameValue
                End Get
                Set(value As String)
                    value = value.ToLower
                    If Not _UserNameValue.ToLower = value Then
                        _UserNameValue = value
                        NotifyPropertyChanged("UserName")
                    End If
                End Set
            End Property

但是文本没有改变大小写。

【问题讨论】:

    标签: vb.net xaml windows-phone-8.1 ivalueconverter


    【解决方案1】:

    您不能像在中那样绑定 Binding 的 Converter 属性

    Text="{Binding ..., Converter={Binding UpperCaseConverter}}"
    

    您应该将转换器实例化为资源

    <Page.Resources>
        <local:CaseConverter x:Key="UpperCaseConverter"/>
    </Page.Resources>
    

    并通过 StaticResource 表达式引用它

    Text="{Binding ..., Converter={StaticResource UpperCaseConverter}}"
    

    【讨论】:

    • 我做了上面提到的更改,所有的调试点都被命中(转换器正在工作)。但是 UI 中的文本没有更新。
    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多