2010-11-25 40 views
0

我有一個C#庫類的實體類,並鏈接到Silverlight的類庫 MVVM屬性(實體必須在C#類,因爲與其他系統的遺留兼容性的)與鏈接複雜的階級和CanExecute接力指揮不靈

實施例(C#庫):

public class TestClass 
{   
    private string _testValue; 
    public string TestValue 
    { 
     get { return _testValue; } 
     set 
     { 
      if (_testValue!= value) 
      { 
       _testValue = value; 
       OnPropertyChanged("TestValue"); 
      } 
     } 
    }} 

此類鏈接到Silverlight的類庫。

在一個MVVM有一個屬性

private TestClass _testProp = new TestClass(); 
     public TestClass TestProp 
     { 
      get 
      { 
       return _testProp ; 
      } 
      set 
      { 
       if (value != _testProp) 
       { 
        _testProp = value; 
        RaisePropertyChanged("TestProp"); 
        PressCommand.CanExecuteChanged(); 
       } 
      } 
     } 

的屬性綁定到一個控制在XAML

<TextBox Text="{Binding TestProp.TestValue, Mode=TwoWay}"> 
<Button Content="Press" Command="{Binding PressCommand}" /> 

我想控制按鈕與RelayCommands CanExecute依賴於測試值在識別TestClass。 ...

PressCommand = new RelayCommand(() => 
    { 
     DoSomething(); 
    },() => TestProp.TestValue != string.empty); 

但是,如果TestValue中發生了變化(不同則爲空字符串),Pres sCommand CanExecute doen't似乎才注意到這個變化,並沒有啓用,使其無法使用......

是否有可能使用CanExecute用這種設置TU

回答

1

你需要做的就是調用PressCommand.CanExecuteChanged()當值改變時。要做到這一點很好聽的價值的財產

VM

public TestClass TestProp 
    { 
     get 
     { 
      return _testProp ; 
     } 
     set 
     { 
      if (value != _testProp) 
      { 
       if(_testProp != null) 
       { 
        _testProp.PropertyChanged -= TestPropChanged; 
       } 


       _testProp = value; 

       if(_testProp != null) 
       { 
        _testProp.PropertyChanged += TestPropChanged; 
       } 

       RaisePropertyChanged("TestProp"); 
       PressCommand.CanExecuteChanged(); 
      } 
     } 
    } 

private void TestPropChanged(object sender, PropertyChangedEventArgs e) 
{ 
     //Can check for specific property if required... 

     PressCommand.CanExecuteChanged(); 
} 
+0

感謝您的屬性更改!您的靈魂/環繞工程非常棒! 順便說一句GalaSoft MVVM是RaiseCanexecuteChanged(),而不是CanExecuteChanged()我的不好,對不起任何人閱讀... – KolarJ 2010-12-02 09:54:16