我尝试在一个项目中更改变量的值:
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 :(得分: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();
就是这样。