Ich baue eine WPF-Anwendung, die als Teil ihres Ablaufs auf Netzwerkkonnektivität prüft und die IP-Adresse in einem TextBlock anzeigt.WPF C# INotifyPropertyChanged startet nicht
Jetzt versuche ich die TextBlock Text-Eigenschaft jedes Mal zu aktualisieren, wenn sich die IP-Adresse aus irgendeinem Grund ändert.
Ich habe die IP-Adresse Änderung funktioniert gut, aber ich konnte INotifyPropertyChanged nicht funktionieren.
Ich habe alle möglichen Lösungen und Implementierungen gelesen, aber ich konnte keinen funktionierenden Code entwickeln.
Die öffentliche Eigenschaft erhält den Wert aus einer statischen Zeichenfolge der Network-Helper-Klasse. So ist der Code:
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 - static 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;
}
Wie Sie können Siehe diese Methode setzt eine statische Zeichenfolge "localIP". Dies wird dann von der IpAddress-Eigenschaft ausgewertet.
Warum wird die TextBlock Text-Eigenschaft nicht aktualisiert, wenn sich die IP-Adresse ändert?
NotifyIPChanged ("IpAddress"); sollte NotifyIPChanged sein ("ipAddress"); oder noch besser NotifyIPChanged (nameOf (ipAddress)); oder erwägen Sie, CallerMemberName zu verwenden, und dann müssen Sie den Namen überhaupt nicht übergeben. – adminSoftDK
Benennen Sie die Eigenschaft in 'IpAddress' um, damit sie den allgemein akzeptierten Namenskonventionen entspricht. Darüber hinaus scheint 'NotifyIPChanged' ein seltsamer Name für eine Methode zu sein, die das PropertyChanged-Ereignis für einen beliebigen Eigenschaftsnamen auslösen kann. Typische Namen für diese Methode sind 'NotifyPropertyChanged',' RaisePropertyChanged' oder 'OnPropertyChanged'. – Clemens
Vielen Dank für Ihre semantischen Vorschläge. Ich habe sie repariert. Das Anwendungsverhalten ändert sich jedoch nicht. Der HF startet nicht. – user1776401