2012-08-12 121 views
1

我有一个只读文本框在UI中绑定到Properties.Settings.Default.MyVar,当窗口打开绑定正确获取值。但是,当用户点击一个按钮(这个按钮改变Properties.Setting.Default.MyVar)文本框不更新(但如果我关闭窗口,并再次打开它,然后我得到新的值)。我已经尝试UpdataSourceTrigger但不起作用。更新属性。设置绑定

我的XML:

<TextBox IsReadOnly="True" 
     Text="{Binding Source={StaticResource settings}, Path=MyVar}"/> 
<Button Content="..." Click="ChangeMyVar_Click"/> 

窗口的代码

public partial class ConfigureWindow : Window, INotifyPropertyChanged 
{ 
    public ConfigureWindow() 
    { 
     InitializeComponent(); 
    } 

    private void ChangeMyVar_Click(object sender, RoutedEventArgs e) 
    { 
     Properties.Settings.Default.MyVar = "Changed"; 
     Properties.Settings.Default.Save(); 

     OnPropertyChanged("MyVar"); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string info) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(info)); 
    } 
} 

调试我看到处理始终是空的。我的INotifyPropertyChanged错误实现?或者我无法使用Properties.Settings更新UI? 如何解决这个问题?谢谢。

+0

控件绑定到Settings对象的属性,* not *绑定到Window的属性。所以在Window上调用PropertyChanged是没有意义的。这些设置已经实现了INotifyPropertyChanged,你不需要手动去做。你的问题在别的地方,查看HB的回答 – 2012-08-12 17:41:56

回答

2

此:

Source={StaticResource settings} 

貌似你不绑定到默认设置,但另一个实例,因此,如果您更改默认设置,课程的结合将不会更新其源尚未在所有改变。用途:

xmlns:prop="clr-namespace:WpfApplication.Properties" 
Source={x:Static prop:Settings.Default} 

更改属性应该是足够的,更改由UI注意到含需要触发更改通知的属性类,所以您的通知不会做任何事情。但是在这种情况下,你根本不需要做任何事情,因为应用程序设置类实现INPC,你只需要绑定到正确的实例。

+0

完美!非常感谢你!!! – 2012-08-12 17:53:30

+0

@LuísGustavo:不客气,很高兴帮助:) – 2012-08-13 04:18:32