これは実装の問題の詳細です。 MainWindowには、SendData(byte [] data)メソッドを公開するシリアルポートオブジェクトがあります。 MainWindowには、実行時に外部XMLファイルを使用して読み込まれるタブコントロールもあります。これらのコントロールはシリアルポートと相互作用し、データの送受信を行います。実行時に作成されたコントロールに代理人を渡す
送信するには、[送信]をクリックし、MainWindow.SendData()を呼び出す必要があります。問題は、MainWindowを参照せずにMainWindow.SendData()を呼び出す方法です(SendData()を別のクラスに移動するなど)。頭に浮かぶ
class MainWindow {
SerialPort serialport;
public MainWindow {
// parse XML and add tabs to tabcontrol
int tabcount = xmlreader.GetNodeCount(xpath);
for (int i = 0; i<tabcount; i++) {
tabitems[i] = new TabClass(tabname, ref tabControl);
}
public void SendData(byte[] data){
serialport.Write(data,0,data.Length);
}
}
class TabClass {
TabItem tabitem;
public TabClass(tabname, ref tabControl){
tabitem = new TabItem();
tabcontrol.Items.Add(tabitem);
// add all controls (coming from xml)
for (int i = 0; i < nrControls; i++) {
// add control here, i.e. CommandControl
}
}
}
class CommandControl {
public Button_Click(){
// Need to call SendData here!!
}
}
まず最初は、TabClassが追加される各カスタムコントロールにデリゲートを渡してきた、TabClassへのSendDataデリゲートを渡すことです。私は各クラスのコンストラクタを渡すことができます。または、代理人をパブリックにしてMainWindowに直接書き込ませることができます。
私が持っている問題は、すべての単一のユーザーコントロールとメインのTabControlでデリゲートを作成して宣言していることです。実装を変更する場合は、すべてのユーザーコントロールで宣言を変更する必要があります。もちろん、新しい実装を組み込むようにコントロールを変更する必要がありますが、すべてのコントロールで宣言を書き換えないようにしたいと考えています。
質問:MainWindowを参照せずにMainWindowからSendData()デリゲートを公開する方法はありますか?私は一度だけ宣言し、すべてのコントロールを共有したいと思います。
ですから、複数のタブから読み取り、同じシリアルポートへの書き込みがありますか? –
直接ではありません。 SendData()は実際には、データを送信する必要がある複数のタブからすべてのコントロールのデータをエンキューするSerialPortマネージャです。すべてのタブは、受信したすべてのデータを管理するReceiveData()を介して、同じSerialPortからデータを受信しています。 – PaulG