[WP7] [MVVM Light toolkit] Кнопка Команда вызывается слишком рано, до связывания при использовании набора инструментов mvvm-light - PullRequest
0 голосов
/ 25 октября 2010

Я использую набор инструментов mvvm-light в своем приложении для Windows Phone 7.

На мой взгляд:

<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, а с точкой останова я вижу, что MyValue равно нулю.Затем достигается точка останова в установщике MyValue, и в MyValue указывается правильное значение.

Что я делаю не так?Конечно, я хотел бы, чтобы с сеттером можно было связаться до RelayCommand ...

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 25 октября 2010

Возможно, вы столкнулись с проблемой TextBox DataBinding с событием TextChanged.Это признанная проблема в Silverlight 3, . В этой ветке обсуждается эта проблема и обходной путь.Оптимальное решение, возможно, заключается в использовании поведения, описанного в этой статье .

HTH, индифромоз

...