私の質問です、あなたはObserverパターンを実装するか、次の操作を実行するためにデータバインディングを使用し、データバインディング:現時点ではObserverパターンか
を、私はGuiDataObjのリストを初期化しています。イベントがトリガーされると、私はGuiDataObjByIdを調べて、オブジェクトを変更します。これはGuiElementにバインドされています。 GUIを更新します。
いくつかのGuiElementsがあります(現時点ではすべて同じタイプですが、将来変更される可能性があります)。クラスオブジェクトを変更し、GuiElementに自動的にGuiElementを更新させたい反映された変化を伴う。
public class GuiElement : ObservableImpl
{
private string guiElementName;
public String GuiElementName
{
get { return guiElementName; }
set
{
guiElementName = value;
NotifyObservers(guiElementName);
}
}
private string status;
public String Status
{
get { return status; }
set
{
status = value;
NotifyObservers(status);
}
}
}
public interface IObserver
{
void Notify<T>(T watchObj);
}
public interface IObservable
{
void Register(IObserver observer);
void UnRegister(IObserver observer);
}
public class ObservableImpl : IObservable
{
protected Hashtable _observerContainer = new Hashtable();
public void Register(IObserver anObserver)
{
_observerContainer.Add(anObserver, anObserver);
}
public void UnRegister(IObserver anObserver)
{
_observerContainer.Remove(anObserver);
}
public void NotifyObservers<T>(T anObject)
{
foreach (IObserver anObserver in _observerContainer.Keys)
anObserver.Notify(anObject);
}
}
変更が通知されたら私のGuiElementはGuiを更新しますか?
public partial class GuiElementControl : UserControl, IObserver
{
public GuiElementControl()
{
InitializeComponent();
}
#region Implementation of IObserver
public void Notify<T>(T watchObj)
{
if (watchObj is GuiElement)
{
UpdateGui(watchObj);
}
}
private static void UpdateGui(object obj)
{
GuiElement element = obj as GuiElement;
if (element != null)
{
NameLbl.Text = element.GuiElementName;
StatusLbl.Text = element.Status;
}
}
#endregion
変更を観測者に通知する代わりに、データバインディングを実装した方がより柔軟な設計になりますか?私が本当に求めているのは、ビジネスオブジェクトを視覚的に表現する最も柔軟な方法であり、常にリアルタイムで更新されていることだと思います。
alt text http://devpupil.net/GuiConcept.PNG