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));
    }
}

デバッグ ハンドラーは常に null です。INotifyPropertyChanged の実装が間違っていますか? または、Properties.Settings を使用して UI を更新できませんか? それを修正する方法は?ありがとう。

4

1 に答える 1

3

これ:

Source={StaticResource settings}

デフォルト設定ではなく別のインスタンスにバインドしているように見えるため、デフォルト設定を変更すると、ソースがまったく変更されていないため、もちろんバインディングは更新されません。使用する:

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

プロパティを変更するだけで十分なはずです.UIが変更に気付くには、プロパティを含むクラスが変更通知を発行する必要があるため、通知は何もしません。ただし、この場合、アプリケーション設定クラスが を実装しているため、何もする必要はありませんINPC。正しいインスタンスにバインドするだけで済みます。

于 2012-08-12T17:34:33.677 に答える