0
在長時間使用本站之後,我終於決定了一個我一直遇到的問題,這讓我發瘋。我一直在使用WPF文本框來顯示我正在編寫的程序的進度,因此我已將它綁定到自定義日誌。但是:文本框不會更新。我究竟做錯了什麼?無法從字符串中獲取TextBox更新OnPropertyChanged
在MainWindow.xaml.cs:
public MainWindow()
{
...
DataContext = this;
...
}
在主窗口。
<ScrollViewer Grid.Column="0" Grid.Row="2">
<TextBox Name="ErrorConsole" AcceptsReturn="true" TextWrapping="Wrap" Margin="0,3,10,0" TextChanged="Console_TextChanged" Background="Black" Foreground="White" />
</ScrollViewer>
而在用戶按下 「開始」 按鈕,執行該代碼的Log.cs
public class Log : INotifyPropertyChanged
{
private string _logText = "";
private static Log instance;
public static string filename { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public static Log GetInstance()
{
if (instance == null)
{
instance = new Log();
}
return instance;
}
public string logText
{
get
{
return _logText;
}
set
{
if (!(_logText == value))
{
_logText = value;
OnPropertyChanged(SystemStrings.status_Updated);
}
}
}
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
//Adds custom messages to the logfile
public void Add(string message)
{
logText += (message + "\n");
logText += SystemStrings.divider + "\n\n";
}
public void AddSimple(string message)
{
logText += (message + "\n");
}
//Cleans the log that is in memory
public void Clear()
{
logText = "";
}
}
的那一刻:
Binding binding = new Binding();
binding.Source = Log.GetInstance();
binding.Mode = BindingMode.TwoWay;
binding.Path = new PropertyPath(SystemStrings.status_Updated);
BindingOperations.SetBinding(ErrorConsole, TextBox.TextProperty, binding);
我曾嘗試結合1 2路,但目前還沒有運氣。但是:如果我把它設置爲2路和使用此代碼
private void Console_TextChanged(object sender, TextChangedEventArgs e)
{
ErrorConsole.Text = Log.GetInstance().logText;
}
文本框(ErrorConsole)實際上會盡快更新到正確的文本當您輸入一個字符。
這裏任何幫助,將不勝感激,因爲這是那些小東西,拋光程序,該程序,儘管不是最先進的圖形之一,應該在我看來,至少使用不是很好。
-Peter
一個靜態成員與'this'無關,所以當你調用'PropertyChanged(this,...)'時,它不適用於靜態屬性。 – Silvermind
感謝您的回答,但您會建議如何綁定它? – Voidpaw
作爲一個骯髒的黑客,你可以使你的屬性非靜態,並且你的屬性通過你的屬性返回靜態,唉。我不敢相信我這麼說。最好避免使用UI進行靜態。 – Silvermind