2016-08-17 6 views
-3

Я новичок в C#, и я новичок в идее «частичных» классов.Как использовать переменную вне частичного класса?

Я хочу получить доступ к переменной «сетка» за пределами этого класса «MainWindow». Как мне это сделать?

enter image description here

+0

снаружи, где? Другой класс? Как они связаны? Если вы вызываете метод этого класса, почему бы не передать его как параметр? Если не статический класс, обладающий этим свойством? – Shyju

+0

@Shyju У меня есть еще один класс, «Сервер», и он получает данные, которые я хочу добавить в grid.ItemSource. Когда я изменяю свой публичный частичный класс MainWindow: Окно в открытый статический частичный класс MainWindow: Window, я получаю следующую ошибку: Статический класс «MainWindow» не может быть получен из типа «Окно». Статические классы должны выводиться из объекта. – 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

О! Это интересно .... Я пытаюсь подумать о том, как реализовать это ... EDIT: Хорошо, просто шучу, вот что я делаю. Я просто не думал об этом правильно. – MrDysprosium

0

Вы должны объявить переменную как общественного члена класса, как этот

public partial class MainWindow ... 
{ 
    public DataGrid grid; 

    public MainWindow() 
    { 
     ... 
    } 

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

Теперь вы можете получить доступ к переменной таким образом

var x = MainWindow.grid; 
Смежные вопросы