2017-03-27 22 views
0

私はListview(ObservableCollectionに結びついています)を持っています。すべての要素はIValueConverterに基づいて計算を有効/無効にします。以下はXamarin:通知呼び出しでIValueConverterを呼び出す方法

はIValueConverterのコードです...

public class StateCheckConverter: IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      var result = false; 

      if (value != null) 
      { 
       var element = value as Element; 
       if (element.Status != Status.Pending) 
        result = true; 
      } 

      return result; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value; 
     } 
    } 

は、今私は(MessageCenterから)の通知を持っているし、コールバックに要素の1の状態が変更されました。要素(INotifyPropertyChangedを使ってラベル、画像など)のテキストと値を変更することができます。しかし、どのようにして対応するIValueConverterを呼び出し、ObservableCollectionを更新するのですか?

ありがとうございました。

UPDATE:

<ContentPage.Resources> 
    <ResourceDictionary> 
     <vm:StateCheckConverter x:Key="transmissionStateCheck" /> 
    </ResourceDictionary> 
    </ContentPage.Resources> 

<Label x:Name="lblLocked" 
         IsVisible="{Binding ., Converter={StaticResource transmissionStateCheck}, Mode=TwoWay}" 
         HorizontalTextAlignment="Center" 
         BackgroundColor="Gray" 
         Opacity="0.75" 
         Text="LOCKED" 
         TextColor="White" 
         FontSize="35" 
         /> 
+0

どのようにコンバータを使用しますか?項目の 'IsEnabled'状態をバインドするコードを投稿してください。 – Emad

+0

@Emadコードを更新しました.. – Xander

答えて

1

[OK]を一つの方法は、プロパティをバインドあなたを変更し、Status自体にバインドすることです。もちろん

<Label x:Name="lblLocked" 
     IsVisible="{Binding Status, Converter={StaticResource transmissionStateCheck}}" 
     HorizontalTextAlignment="Center" 
     BackgroundColor="Gray" 
     Opacity="0.75" 
     Text="LOCKED" 
     TextColor="White" 
     FontSize="35"/> 

あなたが変更する必要がありますあなたのバリューコンバータも:

public class StateCheckConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var result = false; 

     if (value is Status status) 
     { 
      if (status != Status.Pending) 
       result = true; 
     } 

     return result; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

私はそれが助けてくれることを願っています:)

また、あなたのコードでいくつか変更しました。 IsVisibleを双方向モードにバインドすることはできません。自動的に一方向になります。

また、逆変換は、boolとなり、不可能で不要なので返すStatusとなりますので、削除しました。

+1

完全に動作します。あなたが掘った方法で+1します:) – Xander

関連する問題