VS2012とWindows8SDKを使用してMetroアプリを構築しています。アプリには、このクラスがあります(対応する構造体を使用)
// Parameter data structure for tools
public struct ToolParameter
{
public string Title { get; set; }
public Object Value { get; set; }
public string Description { get; set; }
}
// Tool that will be used to execute something on phone
public class Tool
{
public string Title{ get; set; }
public ObservableCollection<ToolParameter> Parameters { get; set; }
public string Description { get; set; }
}
アプリの特定のページで、クラスのインスタンスをページのdataContextにバインドします
this.DataContext = currentTool;
ページには、ページ上で編集できるようにしたいパラメーターなど、アプリに関するさまざまな情報を表示します。このため、TextBoxを使用してパラメーターを表示し、編集できるようにして、ToolParameter構造体の「Value」メンバーにバインドしています。
<TextBox x:Name="ParameterValue" FontSize="15" Text="{Binding Value, Mode=TwoWay}" TextWrapping="Wrap"/>
残念ながら、TextBoxが値にバインドされると、フォーカスがなくなるまで更新されないため、ユーザーがクリックしてパラメーターを更新する(およびTextBoxからフォーカスを変更する)ボタンを追加しました。残念ながら、ボタンをクリックすると、フォーカスは変更されますが、currentTool変数のパラメーターの値は変更されません。私が見逃しているデータバインディングについて何かありますか?ParameterValueという名前のTextBoxの親(パラメーターはすべてListViewの一部です)も双方向である必要があるのではないでしょうか。