2010-05-20 4 views
2

У меня есть приложение WPF для C#, которое каждый раз, когда пользователь открывает новый файл, содержимое отображается в datagrid.Использование класса, инициированного одним методом другим методом

public partial class MainWindow : Window 
{ 
    public TabControl tc = new TabControl(); 

    public MainWindow() 
    { 
     InitializeComponents(); 
    } 

    private FromFile_click(object sender, RoutedEventArgs e) 
    { 
     //gets information from file and then... 

     if (numberOfFiles == 0) 
     { 
      masterGrid.Children.Add(tc); 
     } 
     TabItem ti = new TabItem(); 
     tc.Items.Add(ti); 

     DataGrid dg = new DataGrid(); 
     ti.Content = dg; 

     dg.Name = "Grid"+ ++numberOfFiles; 

     dg.ItemSource = data; 
    } 

    private otherMethod(object sender, RoutedEventArgs e) 
    { 

    } 
} 

Мой вопрос: как использовать данные в dg в методе «otherMethod»? Кроме того, можно ли изменить родительский элемент dg из метода «otherMethod»?

ответ

4

Предполагая, что вы не звоните otherMethod в пределах FromFile_Click, вам нужно указать переменную экземпляра - например, ваш TabControl, за исключением, надеюсь, не публичного. Я предполагаю, что otherMethod на самом деле предназначен для обработки какого-то события, а не для прямого вызова.

Теперь предполагается, что вы хотите, чтобы один DataGrid на экземпляр MainWindow, связанный с этим окном. Если это не так, вам нужно предоставить дополнительную информацию.

+0

«otherMethod» предназначен для обработки событий, своего рода кнопку мыши я еще не определен. См., Я не могу сделать «TabItem» или «datagrid» переменной экземпляра, потому что я не знаю, сколько файлов пользователь открывает. – anon

+0

@anon: Так что, если бы не было двух открываемых datagrids, на которые вы бы хотели ссылаться «otherMethod»? Если вы можете работать * это *, все остальное может стать ясным. –

+0

То, что я пытаюсь сделать, изменить вкладки в виде плитки, когда пользователь нажимает кнопку. Пример. Предположим, что открыто несколько вкладок, каждый из которых имеет данные с независимыми данными. Если пользователь нажимает кнопку, то каждый из данных переносится на отдельную плиту (так что datagrid, будучи дочерним элементом вкладки, будет меняться на дочерний элемент плитки). 'tc' будет скрыт, а' tv' (определенный ниже) станет видимым. Противоположность также может произойти. 'private TileViewControl tv = new TileViewControl();' добавляется ниже, где определяется 'tc'. Так что, я думаю, 'otherMethod' будет ссылаться на все datagrids. – anon

0

Вы должны передать его как параметр другому методу otherMethod или сделать его переменной-членом.

0

установить DataGrid dg как свойство вместо объявления внутри FromFile_click.

Таким образом, когда вы назначаете «дг» он будет работать с любой другой метод (некоторые ограничения применяются)