Обязательная проблема обновления - PullRequest
2 голосов
/ 28 марта 2011

У меня проблема с обновлением привязки при изменении свойства привязки.Посмотрите на код ниже.Я объясню свою проблему в следующем примере.

public class SettingsControl : INotifyPropertyChanged
    {

        string _value = "test";

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

        public SettingsControl() { }


     public string Value
        {
            get { return _value; }
            set { _value = value; OnPropertyChanged("Value"); }
        }
    }

<local:SettingsControl x:Key="Settings"></local:SettingsControl>

<TextBox Height="72" Text="{Binding Value, Mode=TwoWay, Source={StaticResource Settings} }"/>
<TextBlock Text="{Binding Value, Mode=OneWay, Source={StaticResource Settings} }" VerticalAlignment="Top" Width="135" />
<Button Height="100" Click="button1_Click" />

и код позади:

private void button1_Click(object sender, RoutedEventArgs e)
    {
        SettingsControl settings = new SettingsControl();
        settings.Value = "new value";
    }

Теперь, когда я изменяю текст в TextBox, все работает просто отлично.Новый текст отображается в TextBlock.Но если я установлю новый текст в коде на settings.Value, то ничего не произойдет.

Что я должен сделать, чтобы изменить settings.Value в коде и повлиять на TextProperty в TextBlock.

РЕДАКТИРОВАТЬ: Решение ниже для тех, кто имел ту же проблему, что и я:

    SettingsControl settings = (SettingsControl)this.Resources["Settings"];
    settings.Value = "new value";

Ответы [ 2 ]

5 голосов
/ 28 марта 2011

В своем коде вы устанавливаете значение для нового экземпляра , а не для используемого экземпляра.

Попробуйте изменить код на:

private void button1_Click(object sender, RoutedEventArgs e)
{
    // Set the Value on "this"
    this.Value = "new value";
}

При этом свойства «элемента управления» обычно обрабатываются посредством создания свойства зависимости, а не через INotifyPropertyChanged. Это позволяет их правильно устанавливать и использовать в XAML и полностью участвовать в связывании в других сценариях.

0 голосов
/ 28 марта 2011

Вы должны попытаться сделать Mode = TwoWay; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...