我正在使用 VS 2012 和 Windows 8 SDK 构建 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 的一部分)也必须是两种方式吗?