Вы не можете получить доступ к нестатическому полю view
класса ReaderPage
из метода экземпляра класса MyMenuFlyoutItem
. Несмотря на то, что MyMenuFlyoutItem
является вложенным классом из ReaderPage
и / или объявлен в одном и том же файле, эти классы и их экземпляры полностью независимы друг от друга. Думайте об этом, как будто MyMenuFlyoutItem
не был объявлен как вложенный:
public sealed partial class ReaderPage : Page, View.Listener
{
private View view;
}
class MyMenuFlyoutItem : MenuFlyoutItem
{
private void MyMenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
var dataPackage = new DataPackage();
// cannot access view
dataPackage.SetText(view.vSelGetText());
Clipboard.SetContent(dataPackage);
}
}
Из вышесказанного очевидно, что MyMenuFlyoutItem
нужен некоторый экземпляр ReaderPage
, чтобы получить доступ к view
, потому что может быть много экземпляров класса ReaderPage
, и компилятор не будет знать, из какого из этих экземпляров должно быть view
прочитано. Вложенный класс обладает тем преимуществом, что может «видеть» приватных членов родительского класса, но все же вам нужна ссылка на ReaderPage
, из которой вы хотите, чтобы view
читался из.
Одним из нескольких возможных решений этой проблемы является передача ссылки на класс ReaderPage
в конструктор MyMenuFlyoutItem
:
public sealed partial class ReaderPage : Page, View.Listener
{
// Nested class can access this field despite being declared as private
private View view;
class MyMenuFlyoutItem : MenuFlyoutItem
{
private ReaderPage page;
MyMenuFlyoutItem(ReaderPage page)
{
this.page = page;
}
public MyMenuFlyoutItem()
{
this.Click += MyMenuFlyoutItem_Click;
}
private void MyMenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
var dataPackage = new DataPackage();
// Nested class can access field `view` of parent class, although `view` is declared private
// but you still need `page` reference
dataPackage.SetText(page.view.vSelGetText());
Clipboard.SetContent(dataPackage);
}
}
}