我正在开发包含几页的Windows 8.1应用。特别是一个页面有一个绑定到静态资源的文本框,以便可以在页面之间共享它。当我在文本框中编辑文本时,我能够成功地实时更新该静态资源,但我似乎无法让它以相反的方式工作。我希望能够以编程方式更改绑定指向的字符串,并使文本框立即反映出来。
我的静态资源是我设置用于测试的简单datacontext类:
public class HubDataContext : INotifyPropertyChanged
{
private string firstNameTextBox;
public string FirstNameBoxText
{
get { return firstNameTextBox; }
set
{
firstNameTextBox = value;
InvokePropertyChanged(new PropertyChangedEventArgs("FirstName"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, e);
}
}
要测试我是否能够这样做,我在页面上添加了一个按钮,用于修改文本框绑定的字符串:
((HubDataContext)this.mainHubSection.DataContext).FirstNameBoxText = "TEST!";
如果按下按钮,datacontext的FirstNameBoxText会更新,但文本框不会反映这些更改,直到我导航到其他页面然后导航回来。
我还可以修改文本框中的文本,然后导航并返回以显示我的更改已反映出来。基本上我希望能够立即看到对文本框绑定的字符串所做的任何更改,而无需先离开页面。
文本框本身的代码是:
<TextBox x:Name="FirstNameBox" HorizontalAlignment="Left" Height="65" Margin="127,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="327" PlaceholderText="" Header="First Name" DataContext="{StaticResource GlobalDataContext}" Text="{Binding FirstNameBoxText, Mode=TwoWay, Source={StaticResource GlobalDataContext}}"
有没有办法做到这一点?
答案 0 :(得分:3)
使用PropertyChanged事件时,应使用属性名称。绑定使用属性名称作为键。你会看到,在举起事件之后,你可以在属性设置器中放置一个断点。
public class HubDataContext : INotifyPropertyChanged
{
private string firstNameTextBox;
public string FirstNameBoxText
{
get { return firstNameTextBox; }
set
{
firstNameTextBox = value;
InvokePropertyChanged(new PropertyChangedEventArgs("FirstNameBoxText"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, e);
}
}