2016-12-22 19 views
6

MVVM Işık kitaplığını kullanıyorum. Bu kütüphaneden, T türünde bir argümanı olan komutları tanımlamak için RelayCommand<T> kullanıyorum.Nullable <Boolean> değerini CommandParameter'a nasıl geçiririm?

private RelayCommand<bool?> _cmdSomeCommand; 
    public RelayCommand<bool?> CmdSomeCommand 
    { 
     get 
     { 
      if (_cmdSomeCommand == null) 
      { _cmdSomeCommand = new RelayCommand<bool?>(new Action<bool?>((val) => { /* do work */ })); } 
      return _cmdSomeCommand; 
     } 
    } 

nasıl XAML kodundan CommandParameter atayabilirsiniz:

Şimdi tip Nullable<bool> bir argüman gerektiren bir RelayCommand tanımladık?

Ben bir boolean değer geçmek denedim, ama bu şu duruma neden olur

:

System.InvalidCastException: 'System.Boolean' dan geçersiz döküm System.Nullable`1 [' için [System.Boolean, mscorlib, Sürüm = 4.0.0.0, Kültür = tarafsız, PublicKeyToken = b77a5c561934e089]] '.

Boole içeren statik özellikleri tanımlamayı denedim mi? değerler ve XAML bunlara başvuruda:

public static class BooleanHelper 
{ 
    public static bool True { get { return true; } } 
    public static bool False { get { return false; } } 

    public static bool? NullableTrue { get { return true; } } 
    public static bool? NullableFalse { get { return false; } } 
} 

XAML:

<Button Command="{Binding CmdSomeCommand}" CommandParameter="{x:Static my:BooleanHelper.NullableTrue}" /> 

Ama bu atılmasına aynı duruma neden olur. Ayrıca, new Nullable<bool>(true)'u döndürmeyi denedim, ancak beklendiği gibi, bu aynı sonucu veriyor.

+0

Bunu gördünüz mü? http://stackoverflow.com/questions/2850629/declare-a-nullable-int-int-using-xaml – tolanj

cevap

2

MVVM Işığı, parametreyi Execute ve CanExecute arasında farklı bir şekilde işlemek ve null'ı uygun bir şekilde işlememek için hatalı olarak görünüyor.

object t1 = (bool?)true; 
// issue: for Nullable<T>, GetType will return T 
if (t1.GetType() != typeof(bool?)) 
{ 
    if (t1 is IConvertible) 
    { 
     var val = Convert.ChangeType(t1, typeof(bool?), null); 
    } 
} 

Ben sadece bir hata raporu gönderebilirsiniz şüpheli:

orada istisna yol açar ve kolayca aşağıdaki kodla yeniden olabilir ne olur https://github.com/paulcbetts/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommandGeneric.cs#L198 Lines 198-205

sırasında kodu görün Çünkü, null, parametresi olarak null olarak geçebilir, hataları ile işlenir.

+0

Teşekkürler! Bu gerçekten soruna neden oluyor. Bir hata raporu gönderdim: [link] (https://mvvmlight.codeplex.com/workitem/7742). – Chris

+0

Aynı sorun burada 4 ay sonra. Bu düzeltilmiş görünmüyor gibi görünmüyor :( – Speuline

+0

@Speuline Bu soruya atıfta bulunduğum kodun geçerli MVVM Işık uygulamasını yansıtıp yansıtmadığından emin değilim.Ama elinizdeki kaynak ve Sorun bunun içinde, sorunu kendiniz çözebilir ve onunla mutlu olabilirsiniz. – grek40

İlgili konular