2012-08-12 163 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