2012-11-12 22 views
0

我有以下視圖模型:MVVMLight:RelayCommand似乎無法在Windows 8工作程序

public class TransportationUnit : ViewModelBase { 
    private string _TypeOfFuel; 
    private string _Model; 
    private string _Manufacturer; 
    private string _LicencePlate; 
    private Guid _Key = Guid.Empty; 

    public ICommand CmdAddTransportationUnit { get; set; } 

    public TransportationUnit() { 
     CmdAddTransportationUnit = new GalaSoft.MvvmLight.Command.RelayCommand(() => AddTransportationUnitDo(),() => AddTransportationUnitCan()); 
    } 

    /// <summary>manufacturer</summary> 
    public string Manufacturer { 
      get { return _Manufacturer; } 
      set { 
      if (_Manufacturer == value) 
       return; 
      RaisePropertyChanging("Manufacturer"); 
      _Manufacturer = value; 
      RaisePropertyChanged("Manufacturer"); 
     } 
    } 

    /* ommitted some equal properties */ 

    public bool AddTransportationUnitCan() { 
     return !string.IsNullOrWhiteSpace(Model) && !string.IsNullOrWhiteSpace(Manufacturer) & !string.IsNullOrWhiteSpace(LicencePlate); 
    } 

    public async void AddTransportationUnitDo() { 
     await LogbookRepository.Instance.Add<TransportationUnit>(this); 
    } 
} 

我的文本框綁定這樣:

<TextBox x:Name="CarManufacturerNameText" Width="400" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Text="{Binding Manufacturer,Mode=TwoWay}" /> 

我在AppBar(底部)按鍵綁定這樣:

<Button Style="{StaticResource SaveAppBarButtonStyle}" AutomationProperties.Name="" x:Name="save" x:Uid="StandardSave" Command="{Binding CmdAddTransportationUnit}" /> 

我會期望按鈕被禁用時,方法AddTransportationUnitCan評估es爲false,反之亦然。當所有文本框都被填充時,它會一直被禁用,甚至在創建RelayCommand時,在該方法中設置的斷點只會觸發一次。我已經測試了相當長的時間,但還沒有找到解決方案。還有其他人有這個問題嗎?

編輯:當我剛剛在AddTransportationUnitCan返回true按鈕啓用

回答

2

嘗試添加RaiseCanExecuteChanged你的財產setter方法。這將告訴您的RelayCommand重新評估CanExecute。

public string Manufacturer { 
      get { return _Manufacturer; } 
      set { 
      _Manufacturer = value; 
      RaisePropertyChanged("Manufacturer"); 
      CmdAddTransportationUnit.RaiseCanExecuteChanged(); 
     } 
    } 
相關問題