2016-08-17 9 views
-3

私はC#の初心者です。私は「部分的な」クラスのアイデアを初めて知りました。部分クラスの外で変数を使用するにはどうすればよいですか?

この "MainWindow"クラスの外にある "grid"変数にアクセスしたいと思います。それをどうやってやりますか?あなたのクラスが異なるファイル間で分割され

enter image description here

+0

内の変数にアクセスすることができ、この

public partial class MainWindow ... { public DataGrid grid; public MainWindow() { ... } public void DataGrid_Loaded(...) { ... grid = sender as DataGrid; ... } } 

ようなクラスの公共メンバーとして変数を宣言する必要がありますか?別のクラス?彼らはどのようにつながっていますか?そのクラスのメソッドを呼び出す場合は、それをパラメータとして渡すのはなぜですか?そうでない場合は、このプロパティを持つStaticクラスですか? – Shyju

+0

@Shyju 私は別のクラス "Server"を持っていて、grid.ItemSourceに追加したいデータを受け取ります。 パブリック部分クラスMainWindow:Windowをpublic static partialクラスMainWindow:Windowに変更すると、次のエラーが発生します。 静的クラス "MainWindow"は、 'Window'タイプから派生することはできません。静的クラスはオブジェクトから派生しなければなりません。 – MrDysprosium

+0

あなたはそれをすることはできません、そして、それは部分的なクラスであることとは関係ありません。変数 'grid'はあなたのクラスのメソッド内部のローカル変数です。 – dasblinkenlight

答えて

3

部分的な手段は、それが他のクラスへの変数の暴露とは何の関係もありません。

あなたのグリッドは現在のメソッドのローカル変数なので、他の人はアクセスできません。アクセス可能にしたい場合は、代わりにプロパティとして定義します。

public DataGrid Grid { get; set; } 
+0

すごい、それは私が必要なものです。今私は新しい問題があります! grid(grid.Items.Refresh())のプロパティにアクセスしようとすると、次のエラーが発生します。 System.InvalidOperationException:呼び出し元スレッドは、別のスレッドがそのオブジェクトを所有しているため、このオブジェクトにアクセスできません。 – MrDysprosium

1

技術的には可能ですが、クラス外でデータグリッドにアクセスできないようにする必要があります。グリッドはクラスによって管理されているビューの一部です。そのため、他のクラスからグリッドにアクセスできるようにすると、フォームの実装の詳細を表示できるようになり、カプセル化が解除されます。

I have another class, Server , and it receives data that I wish to add to grid.ItemSource .

次に、あなたのServerクラスは、フォームにグリッドをバインドするデータソースを提供する必要があります。言い換えれば、アクセスは他の方向に進むべきです。

+0

ああ!それは面白いです...私はこれを実装する方法を考えようとしています... 編集:さて、冗談、それは私がやっていることです。私はちょうどそれを正しい方法と考えていませんでした。 – MrDysprosium

0

あなたは今、あなたはこのよう外

var x = MainWindow.grid; 
関連する問題