2011-08-10 21 views
3

WPF ToggleButtonのブール型IsCheckedプロパティを、モデル内のブール値ではない値にバインドするために使用するバリューコンバータを作成しようとしています。私が書いた変換機能は、次のようになります。WPFトグルボタンのIsCheckedプロパティのValueConverter

 public object Convert(object value, Type targetType, object paramter, System.Globalization.CultureInfo culutre) 
     { 
      if (targetType != typeof(Boolean)) 
      throw new InvalidOperationException("Target type should be Boolean"); 

      var input = double.Parse(value.ToString()); 

      return (input==0.0) ? false: true; 
     } 

問題がfuncionが呼び出されたときに、TargetTypeが、私は期待しないで何ということです - それは可能System.Booleanよりもむしろ

  "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" 

をです。これは期待されていますか?私は過去に面倒なことのない他のコンバータを書いてきました。

答えて

4

はい、ToggleButton(チェックボックスと考える)は、Checked、Unchecked、およびNeitherの3つの状態になります(チェックボックスはグレー表示されます)。

MSDN library states

ToggleButton Class 
Base class for controls that can switch states, such as CheckBox. 

for IsChecked:あなたがbool?またはNULL可能にキャスト場合

Property Value 
Type: System.Nullable<Boolean> 
true if the ToggleButton is checked; false if the ToggleButton is unchecked; otherwise null. The default is false. 

だから、あなたは簡単に.HasValue.Valueで値を得ることができます。

+0

+1を参照してください.HasValue。最初にnull可能な型を使用し始めたとき、HasValueをチェックせずにValueにアクセスすることで問題が発生しました。 @ _ @ –

3

これは予期したとおりです。 IsCheckedは、boolではなく、bool?です。あなたの最初の行はこれに変更します。

if (targetType != typeof(bool?)) 
2

はい、にisCheckedは「NULL可能」ブールです...それは、真偽、またはnullになる可能性を意味しています。ここではnull値を持つトグルボタンを使用することはほとんどありませんが、CheckBoxなどのサブクラスではより一般的です。

2

IsCheckedは、null可のブール値です。だからBooleanの代わりに、bool?

関連する問題