現在、ApplicationBarIconButtons を使用してフォームとのユーザー インタラクションを駆動するビューの検索 (より適切には「フィルター」) フォームを実装しています。 . フィルターを受け入れるテキスト ボックスは、ViewModel のプロパティにバインドされます。
XAML
<toolkit:PhoneTextBox x:Name="txtSearch" Text="{Binding VisitsFilter, Mode=OneWay}" />
ビューモデル
private string _visitsFilter;
public string VisitsFilter
{
get
{
return _visitsFilter;
}
set
{
_visitsFilter = value;
RaisePropertyChanged("VisitsFilter");
RebuildVisits();
}
}
問題は、ApplicationBarIconButtons がコマンドなどを使用して ViewModel 上のポイントにバインドする機能を実際に持っていないことです。そのため、Click イベントのコード ビハインド ハンドラーでそれらとのやり取りを処理します。それほど大したことではないようです... ページのデータ コンテキストから ViewModel を取得し、バインドされたプロパティの値を設定します。
コードビハインド
private VisitsViewModel ViewModel
{
get
{
return this.DataContext as VisitsViewModel;
}
}
private void abbClear_Click(object sender, EventArgs e)
{
this.Focus();
ViewModel.VisitsFilter = string.Empty;
}
セッターを介して上記のコードをたどると、プライベート文字列メンバーの値を設定し、プロパティが変更されたというイベントを発生させることがわかります。私は実際に、「クリア」ボタンを表示するかどうかについて他のロジックを実行しているビューで、このイベントへのサブスクリプションの背後にあるコードを持っていますが、ポイントはそのイベントで正常にリッスンしていることです。ただし、上記のマークアップの OneWay バインディングは、PhoneTextBox の Text プロパティの値を更新しません。
ここの切断はどこですか?