我有一个 WPF ViewModel
class MainWindowViewModel : INotifyPropertyChanged
{
private string _sql;
public string Sql
{
get { return _sql; }
set
{
if (value == _sql) return;
OnPropertyChanged("Sql");
_sql = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
我还有一个带有 TextBox 的 XAML 视图
<Window.Resources>
<HbmSchemaExporter:MainWindowViewModel x:Key="viewModel"/>
</Window.Resources>
....
<TextBox Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Source={StaticResource ResourceKey=viewModel}, Path=Sql,Mode=OneWay}"/>
背后的代码
private MainWindowViewModel ViewModel
{
get { return Resources["viewModel"] as MainWindowViewModel; }
}
问题是,当我在代码中执行时viewModel.Sql = SOMETHING
,文本框没有得到更新。调试器在属性中显示正确的值,但文本框保持空白。
我还尝试将绑定更改为,TwoWay
但这只允许我用我在文本框中键入的值覆盖属性,这是我并不真正想要的(实际上我仍然需要将其设为只读,但它目前不在范围)。
以编程方式更新属性后如何更新文本框?
该应用程序基本上是我在阅读本文后编写的 NHibernate DDL 生成器。我需要按下“生成 SQL”按钮,它会显示要在数据库上运行的代码。