2015-06-19 4 views
0

Я использую Case конвертер в моем XAML для текстового поля как:IValueConverter не работает в телефоне 8.1 Xaml

<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 

Проблема в том, что преобразование корпуса не работает, не могли бы вы исправить меня или совет, где я поступил неправильно.

EDIT: Модифицированный 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 

Однако текст не меняется случай.

ответ

0

Вы не можете связать конвертер свойства Binding, как вы делали в

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

Вы должны вместо этого экземпляра конвертера в качестве ресурса

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

и ссылаться на него с помощью выражения StaticResource

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

Я сделал упомянутые изменения, удалены все точки отладки (конвертер работает). однако текст в пользовательском интерфейсе не обновляется. – surpavan

Смежные вопросы