无法在同一解决方案中将变量的更新值从一个项目发送到另一个项目

时间:2017-09-16 15:23:52

标签: c# wpf

我尝试在一个项目中更改变量的值:

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的值仍然相同。 有什么想法吗?

1 个答案:

答案 0 :(得分: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(...);
   }
}

setter中的最后一行将通知WPF对指定属性发生的更改,它将自动在UI中更新。    3)最后一步。 WPF提供了丰富的绑定环境。我们假设您有一个TextBlock用于呈现Test属性内容。然后它必须以某种方式相似:     <TextBlock Text="{Binding Test}" />。    请注意,除非TextBlock或其任何父项具有非DataContext属性,否则绑定将不起作用。有很多方法可以分配它,但为了简单起见,我假设您将在Window(非常非常根元素)构造函数中执行此操作:

InitializeComponent();
DataContext = new MyClass();

就是这样。