[WP7] [MVVM Light工具包]按钮命令在使用mvvm-light工具包进行绑定之前过早引发

时间:2010-10-25 07:01:52

标签: windows-phone-7 mvvm-light

我在windows phone 7应用程序中使用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为null。然后,达到MyValue的setter中的断点,并且正确的值在MyValue中。

我做错了什么?当然,我希望在RelayCommand之前可以访问setter ......

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可能遇到TextChanged事件的TextBox DataBinding问题。这是Silverlight 3中的公认问题,see this thread discussing this issue和解决方法。一个简洁的解决方案可能是使用this article中讨论的行为。

HTH,indyfromoz