Мне интересно, как обновить мой UI
с моим static
. У меня есть 2 свойства в моей модели и один из них static
:PropertyChangedEventHandler для статической переменной, не изменяющейся
public class Machine : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public static event PropertyChangedEventHandler StaticPropertyChanged;
public string _name;
public static int _counter;
public void AddMachine(Machine machine)
{
_counter++;
}
public string Name
{
get { return _name; }
set
{
_name = value;
NotifyPropertyChange("Name");
}
}
public static int Counter
{
get { return _counter; }
set
{
_counter = value;
OnStaticlPropertyChanged("Counter");
}
}
public virtual void NotifyPropertyChange(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public static void OnStaticlPropertyChanged(string propertyName)
{
var handler = StaticPropertyChanged;
if (handler != null)
StaticPropertyChanged(
typeof(Machine),
new PropertyChangedEventArgs(propertyName));
}
}
Как вы можете видеть, я создал еще один PropertyChangedEventHandler
для моего static
значения. Другое свойство (не статическое - имя) работает нормально. Я держу свой объект в коллекции:
public ObservableCollection<Machine> machines { get; set; }
И я могу видеть Counter
меняется, но не обновляет свой UI
, это то, как я пытаюсь обновить мой UI
используя TextBlock
:
<TextBlock Name="tbStatusBar" Text="{Binding Source={x:Static my:Machine.Counter}}" />
Итак, мой вопрос в том, что я делаю неправильно?
Возможно, вы должны заменить '_counter ++' на 'Counter ++' в AddMachine. – Clemens
Я уже пробовал, и это не проблема – user979033
Вы действительно используете WPF 4.5? Механизм событий StaticPropertyChanged не будет работать со старой версией. – Clemens