1

A MVVM パターンに従います。TextBox の Text が変更されるたびに、viewModel でプロパティ セッターをトリガーするには、TextBox が必要です。問題は、ViewModel のセッターが呼び出されないことです。これは私が持っているものです:

ビュー (.cs)

public partial class AddShowView : PhoneApplicationPage
{
    public AddShowView()
    {
        InitializeComponent();
    }

    private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
    {
        DataContext = new AddShowViewModel(this.NavigationService);
    }

    private void SearchTextBox_TextChanged_1(object sender, TextChangedEventArgs e)
    {
        var textBox = (TextBox)sender;
        var binding = textBox.GetBindingExpression(TextBox.TextProperty);
        binding.UpdateSource();
    }
}

関連する部分のみを表示 (.xaml)

<TextBox Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Center" Text="{Binding SearchText, UpdateSourceTrigger=Explicit}" TextChanged="SearchTextBox_TextChanged_1" />

ビューモデル

public class AddShowViewModel : PageViewModel
{
    #region Commands

    public RelayCommand SearchCommand { get; private set; }

    #endregion

    #region Public Properties

    private string searchText = string.Empty;
    public string SearchText
    {
        get { return searchText; }
        set
        {
            searchText = value;
            SearchCommand.RaiseCanExecuteChanged();
        }
    }

    #endregion

    public AddShowViewModel(NavigationService navigation) : base(navigation)
    {
        SearchCommand = new RelayCommand(() => MessageBox.Show("Clicked!"), () => !string.IsNullOrEmpty(SearchText));
    }
}

ソースからターゲットへのバインディングは機能します。再確認したので、DataContext は正しく設定されています。どこで間違ったのかわかりません。助けてくれてありがとう。

4

1 に答える 1

1

バインディング モードを TwoWay に設定する必要があります。そうしないと、ViewModel から値を読み取るだけで更新されません。

Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=Explicit}"
于 2012-10-31T20:01:36.507 に答える