2010-10-25 96 views
0

我在我的windows phone 7應用程序中使用了mvvm-light工具包。[WP7] [MVVM Light toolkit]按鈕命令提前過早,在使用mvvm-light工具包綁定之前

我有我的觀點:

<TextBox Height="78" HorizontalAlignment="Left" Margin="108,33,0,0" VerticalAlignment="Top" Width="313" Text="{Binding MyValue, Mode=TwoWay}" /> 
<Button Content="Go" Height="78" HorizontalAlignment="Left" Margin="127,252,0,0" Name="button1" VerticalAlignment="Top" Width="213" cmd:ButtonBaseExtensions.Command="{Binding DoCommand}" /> 

我的視圖模型爲:

public class MainPageViewModel : ViewModelBase 
    { 
     public ICommand DoCommand { get; internal set; } 
    public MainPageViewModel() 
    { 
     DoCommand = new RelayCommand(() => 
      { 
       DoSomethingWith(MyValue); 
      },() => true); 

    } 

    private const string MyValuePropertyName = "MyValue"; 
    private string _myValue; 
    public string MyValue 
    { 
     get { return _myValue; } 
     set 
     { 
      if (_myValue == value) 
       return; 
      _myValue = value; 
      RaisePropertyChanged(MyValuePropertyName); 
     } 
    } 
} 

在模擬器中,當我在文本框中輸入值,我按一下按鈕,我可以看到我要先在relaycommand lambda表達式中使用斷點 我看到MyValue爲空。然後,到達MyValue的setter中的斷點,並在MyValue中輸入正確的值。

我在做什麼錯?當然,我希望在繼電器命令之前可以達到二傳手...

在此先感謝您的幫助。

回答

0

可能是因爲TextChanged事件而導致TextBox DataBinding問題。這是Silverlight 3,see this thread discussing this issue和解決方法中公認的問題。一個簡潔的解決方案可能是使用this article中討論的行爲。

HTH,indyfromoz

+0

感謝您的回答。你正在談論SL 3,但是我正在使用SL4,這會改變什麼? – Tim 2010-10-25 09:18:52

+0

請注意,Windows Phone 7 Silverlight是Silverlight 4中的一些部分。請看這篇文章 - http://www.silverlighthack.com/post/2010/03/16/Silverlight-for-Windows-Phone- 7-NOT-the-same-full-Silverlight-3-RTM.aspx,還有其他帖子討論WP7上的Silverlight版本 – indyfromoz 2010-10-25 10:08:42