我固定我的問題應該有不同要求(以及去除需要返回通過在我的foo類中實現INotifyPropertyChanged並引發一個PropertyChanged事件,以便在需要讓用戶知道某些內容發生變化時由窗體窗口捕獲到這些事件。
類
foo-
public class foo : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int bar;
private void NotifyPropertyChanged(string type) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(type));
}
}
private void test(){
bar = 1;
NotifyPropertyChanged("changed int");
}
}
在Windows窗體
:
public partial class GUI : Form {
foo fooinstance = new foo();
public GUI(){
InitializeComponent();
fooinstance.PropertyChanged += doEvent;
}
private void doEvent(object sender, PropertyChangedEventArgs e){
foo updated = sender as foo;
if (object.ReferenceEquals(e.PropertyName, "changed int")) {
ShowWhatChanged(updated.bar); //show on GUI
}
}
}
編輯: 更優雅,我結束了使用更清潔的方式是利用回調。 GUI在實例化時將函數指針傳遞給foo,並且foo將其用作委託,以在必要時將字符串傳回GUI。無需事件:
public class foo {
public delegate void UpdateCallback(string msg);
private UpdateCallback _ucb;
public foo(UpdateCallback cb){
_ucb = cb;
}
private void test(){
if(_ucb != null) {
_ucb("Message Here");
}
}
}
public partial class GUI : Form {
public GUI(){
InitializeComponent();
foo fooinstance = new foo(showmessage);
}
private void showmessage(string msg){
//do whatever with the message
}
}
您可能會感興趣[INotifyDataErrorInfo(https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo(V = vs.110)的.aspx) –
@ScottChamberlain原諒我,我對C#非常陌生 - 這是否會允許我以某種方式提出可能被窗體窗體捕獲的事件? – Cobalt
是的,你暗示接口,你可以用它來提供哪些屬性有錯誤的信息。谷歌教程瞭解如何實現它,它與WinForms和WPF都集成在一起 –