Я создаю приложение WPF, которое как часть потока, проверяет сетевое подключение и отображает IP-адрес в TextBlock.WPF C# INotifyPropertyChanged не запускается
Теперь я пытаюсь обновить свойство TextBlock Text каждый раз, когда IP-адрес изменяется по какой-либо причине.
У меня есть изменение IP-адреса, работающее нормально, но я не мог заставить INotifyPropertyChanged работать.
Я прочитал все возможные решения и реализации, но не смог найти рабочий код.
Публичное свойство получает значение из статической строки из класса Network Helper. Таким образом, код:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string ipAddress
{
get { return NetworkStatus.localIP; }
set
{
if (value != NetworkStatus.localIP)
{
NetworkStatus.localIP = value;
NotifyIPChanged("IpAddress");
}
}
}
private void NotifyIPChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
XAML:
<TextBlock x:Name="ipTxt"
TextWrapping="Wrap"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding DataContext.ipAddress}"
Height="30"
Width="110"
Margin="-30,10,0,-10"
/>
UPDATE NetWorkStatus.cs - статические BOOL IsNetworkAvailable() ...
if (statistics.BytesReceived > 0 || statistics.BytesSent > 0)
{
IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
localIP = host.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
return true;
}
Как вы можете см. этот метод устанавливает статическую строку «localIP». Затем это оценивается с помощью свойства IpAddress.
Почему свойство TextBlock Text не обновляется при изменении IP-адреса?
NotifyIPChanged ("IpAddress"); должен быть NotifyIPChanged ("ipAddress"); или даже лучше NotifyIPChanged (nameOf (ipAddress)); или подумайте о том, как использовать CallerMemberName, а затем вам вообще не нужно передавать имя. – adminSoftDK
Переименуйте свойство в 'IpAddress', чтобы оно соответствовало общепринятым соглашениям об именах. Кроме того, 'NotifyIPChanged' представляется нечетным именем для метода, который может запускать событие PropertyChanged для любого имени свойства. Типичными именами для этого метода являются «NotifyPropertyChanged», «RaisePropertyChanged» или «OnPropertyChanged». – Clemens
Благодарим вас за семантические предложения. Я исправил их. В любом случае поведение приложения не изменяется. Обработчик не запускается. – user1776401