2017-09-16 81 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

相关问题