2つのクラスを分離するのに苦労しています。
私は、インターフェイス(xamlで定義)を微調整するために使用するコード( "クラスA"と呼びます)を使用しています。
次に、ロジックのみのクラスBがあります。しかし、ロジックの実行中は、UIを更新する必要があります。
私の問題は、Bが機能を終了していないため、UIを更新するためにクラスBからAに「戻る」ことができないことです。また、AとBを結合するため、ビュー自体をBに変更することはできません。
いくつかのインターフェイスロジックを使用する必要があると思いますが、方法がわかりません。
例えば :
Class A
{
private void OnClickEvent()
{
var B = new(B);
b.work();
}
private void UpdateUI()
{
...
}
}
Class B
{
public void work()
{
while (...)
{
...
//Here, how to call A.UpdateUI() ?
...
}
}
}
よろしくお願いします!
おそらくwork()
を非同期で実行し、イベントを使用してUIの更新を引き起こす可能性のある変更を通知します。イベントの利点は、イベントソースがサブスクライバーについて何も知らないため、ビジネスロジック(B)をビュー(A)から切り離したままにできることです。
インターフェースを導入するだけです:
class A : BUpdateTarget
{
private void OnClickEvent()
{
var B = new(B);
b.work(this);
}
public void UpdateUI()
{
...
}
}
interface BUpdateTarget
{
UpdateUI();
}
class B
{
public void work(BUpdateTarget updateTarget)
{
while (...)
{
//...
updateTarget.UpdateUI()
//...
}
}
}
B
はいくつかのユーザーインターフェイスのロジックを表し、A
は同じユーザーインターフェイスの分離コードクラスを表すようです。
MVVMを使用できない場合は、B
クラスにINotifyPropertyChanged
インターフェースを実装して、クライアント(A
クラス)での変更を通知できるようにすることをお勧めしますその状態(たとえば、コレクション内の更新など)。変更が発生すると、A
に通知が送られ、必要な処理をすべて実行できます。