2017-09-16 76 views
0

我試圖改變一個項目一個變量的值:不能從一個項目發送變量的更新值到另一個在同一個解決方案

public string test; 
public void Test (string _result) 
{ 
    test = _result; 
    //here i want to update the value of my variable 
} 
//Below there is a condition from one of my methods 
if (result == 0) 
{ 
    Test(_client.ErrorText(result)); 
} 

現在我想收到此變量在xaml.cs中:

private void AddString (object sender, RoutedEventArgs e) 
{ 
    _test = test  
    ListBox.Items.Add(_test);   
} 

因此,程序只將默認值添加到ListBox中。之後,即使Test()方法中的變量已更改,添加到ListBox的值仍然相同。 任何想法?

回答

0

是的,這是完美的預期行爲。由於test不過是普通的CLR字段,它不會通知WPF或任何其他GUI在某些時刻發生的更改。 我假設你想做正確的方式?在這種情況下,有必要重寫大部分代碼。 1)在你的類上實現INotifyPropertyChanged intreface。所以它看起來像public class YourClass : INotifyPropertyChanged。 2)將字符串字段轉換爲字符串屬性,並在setter方法中引發PropertyChanged事件。考慮以下劃傷:

public string Test { 
    get { return _test; } 
    set { 
     _test = value; 
     PropertyChanged?.Invoke(...); 
    } 
} 

在二傳手的最後一行將通知WPF上改變發梗到指定的屬性,它會在你的用戶界面自動更新。 3)最後一步。 WPF提供了一個豐富的綁定環境。讓我們假設您有一個TextBlock旨在呈現Test屬性內容。然後它必須有點類似: <TextBlock Text="{Binding Test}" />。 請注意,綁定不起作用,除非TextBlock或其任何父項具有非零的DataContext屬性。有許多方法來分配,但爲了簡單起見,我想你會做你的窗口(非常非常的根元素)構造函數:

InitializeComponent(); 
DataContext = new MyClass(); 

就是這樣。

+0

林不知道這是問題,因爲他已經調用Listbox.Items.add – sTrenat

+0

我已經根據您的建議進行了修改,它運作良好。謝謝 – BonnRon

相關問題