【发布时间】:2015-01-23 05:11:16
【问题描述】:
对于一个菜鸟问题,我提前道歉。 我有一个字符串在不受我控制的情况下发生变化(另一方的字符串)让我们称之为 firstString, 每次这个字符串发生变化时,我都需要在我的程序中执行一个操作。
所以我创建了一个实现“INotifyPropertyChanged”接口的类, 并在其中创建了一个带有属性的字符串,我们称之为 secondString, 在表单的主要方法上,我创建了一个“PropertyChangedEventHandler”和一个显示值为 firstString 的消息框的事件方法。
如果我通过单击按钮更改其值手动测试和更改 firstString 并在它通过 secondString 的属性后得到一个带有 firstString 值的消息框,则一切正常,我将其设置为:
SecondString(这是一个属性)= firstString;
但问题是 firstString 会自行改变,我无法控制它,所以如果它被代码设置为等于 secondString 的属性,那么它只会在它第一次运行时起作用。
所以现在每次 secondString 的属性发生变化时,都会触发事件并且该部分工作正常。 但是每次 firstString 的值发生变化时,我都需要使用 firstString 的值自动设置 secondString 的值。我有点想 INotifyPropertyChanged 也应该在这里以某种方式在这部分工作,但我不明白如何。 所以我试图弄清楚我们如何将字符串的 A 值“绑定”到 secondString 的属性,并进入 DataBinding,但我找不到任何将两个字符串绑定在一起的示例,只是关于绑定到控件或从控件绑定。
编辑:这是一段演示代码,我想我错过的关键是 firstString 是我从另一方的类库中获得的字符串。
Using AnotherPartyLibrary;
FirstClass fc;
public Form1()
{
InitializeComponent();
fc = new FirstClass();
fc.PropertyChanged += new PropertyChangedEventHandler(fc_PropertyChanged);
fc.SecondString = AnotherPartyLibrary.firstString;
this.Disposed += new EventHandler(Form1_Disposed);
}
void fc_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
MessageBox.Show("Something changed!" + e.PropertyName);
}
public class firstClass :INotifyPropertyChanged
{
private string secondString = string.Empty;
public string SecondString
{
get { return this.secondString; }
set
{
this.secondString = value;
NotifyPropertyChanged("SecondString");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
这个问题通常是如何解决的?提前谢谢了!
编辑:除了 a.azemia 提供的解决方案之外,任何人都可以提供其他解决方案吗?再次感谢!
雷。
【问题讨论】:
-
如果你能发布一些代码,它会有所帮助..
-
你能提供你正在做什么的示例源代码吗?
-
firstString 是如何更新的?这发生在哪里,你如何获得它的价值?发生这种情况时,您需要致电通知,但如果不了解更多详细信息,很难确切地告诉您如何操作。请提供一个简单的示例,说明您正在做什么以及您希望发生什么。
-
我了解您希望在
firstString更改时收到通知。那么你为什么要在secondString上实现INotifyPropertyChanged事件?你应该在firstString上实现INotifyPropertyChanged,然后你应该在事件中做任何你想做的事情。您已经写过要在firstString更改时执行操作。我正在基于此撰写此评论。贴一些示例代码。 -
第一个字符串是否存在于控件中?和编辑字段?当字符串更改时,该控件是否更新?