Получите хорошую помощь здесь ранее относительно получения собственности из другого класса с помощью обработчика событий. Update property from interfaceСвойство не привязывается к виду
Результат - свойство, которое выглядит так на моем ViewModel, и оно не ведет себя знакомым способом.
public string Test
{
get { return _myInterface.Test; }
set {_myInterface.Test = value }
}
Это свойство, которое я хотел бы привязать к моему представлению. Обычно я делал бы это так:
<TextBlock Text="{Binding Test}"/>
Это свойство не работает. При зависании значения я вижу, что есть value
. Но когда я нахожусь над именем свойства, ничего не происходит.
Edit:
public double Test
{
get { return _myInterface.Test; }
set
{
_myInterface.Test = value;
OnPropertyChanged("Test");
}
}
общественности новое событие PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
Полный код:
Интерфейс:
public interface IMyInterFace: INotifyPropertyChanged
{
string Test { get; set; }
}
Класс, который реализует это:
public class MyClass : MyInterface
{
private string _test;
public string Test
{
get { return _test; }
set
{
_test = value;
OnPropertyChanged("Test");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public void MyMetod()
{
//logic that updates Test
}
ViewModel: (. Принимает IInterface в конструкторе)
public string Test
{
get
{
return _myInterface.Test;
}
set
{
_myInterface.Test = value;
OnPropertyChanged();
}
}
public new event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
OnPropertyChanged в VM не делает никогда попасть ..
UPDATE:
Это теперь мой взгляд, модель:
Я избавилась от MVVM-света, и теперь сделать это следующим образом:
public class ViewModel : INotifyPropertyChanged
{
public string Test
{
get { return _myInterface.Test; }
set
{
_myInterface.Test = value;
OnPropertyChanged("Test");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Но обработчик событий никогда не попадает. Value
в Test-property никогда не присваивается должным образом. Даже при том, что я могу «видеть» значение при наведении курсора на value
. Большое вам спасибо за помощь.
Выглядит нормально. Он не будет обновляться, поскольку вы не реализовали 'INotifyPropertyChanged', но, кроме этого, он выглядит отлично. Вам нужно будет отправить больше кода. – nvoigt
Спасибо, я сделал редактирование, где я (надеюсь, правильно) реализовал INotifyPropertyChanged. Тем не менее, обновление не видно. – Wranglerino
Проверьте «DataContext» вашего объекта «Window» (или любого другого контейнера, который вы используете). [Snoop] (http://snoopwpf.codeplex.com/) может быть хорошим способом отладки вашей привязки. – dotNET