2017-02-15 3 views
0

Следующий код находится в проекте WPF с использованием NavigationWindow. В коде есть несколько методов переопределения. В переопределении ниже «FavoriteItem» должен быть доступен доступ. «ИзбранноеItem» находится в отдельном файле .XAML. Ясно, что я не обращаюсь к нему должным образом. Это переопределение:Как элементы XAML доступны из кода в другом файле XAML?

Protected Overrides Sub OnClosed(e As EventArgs) 
    MyBase.OnClosed(e) 
    ' Persist the list of favorites 
    Dim f As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly() 
    Using stream As New IsolatedStorageFileStream("myFile", FileMode.Create, f) 
    Using writer As New StreamWriter(stream) 
     For Each item As TreeViewItem In DirectCast(System.Windows.Application.Current.Properties("favoritesItem"), TreeViewItem).Items 
     writer.WriteLine(TryCast(item.Tag, String)) 
     Next 
    End Using 
    End Using 
End Sub 

Эта ошибка:

Object reference not set to an instance of an object 

Что такое правильный способ получить доступ к XAML элемент [отредактированный] в другом файле?

+0

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Codexer

+0

Я понимаю, что объект возвращает исключение NullReferenceException, но не так, потому что я не правильно обращаюсь к Property? У Cast нет ничего, чтобы вернуться, потому что на Property фактически не обращаются, да? Я предполагаю, что если я верну ссылку на Property, то я получу данные из TreeView. Я не понимаю, как получить доступ к этому свойству. – Alan

ответ

1

Что вы здесь делаете? Код, который вы опубликовали, не имеет никакого отношения к доступу к объектам XAML в другом файле. Свойство Application.Properties - это просто словарь для обмена данными в потокобезопасном режиме между различными частями вашего приложения. Это очень редко используется в моем опыте - на самом деле у меня есть never видел, как он использовался. Вы получаете пустое исключение, потому что вы, вероятно, не добавили сначала слова «Избранное» в словарь.

Если вы хотите получить доступ к именованному элементу XAML из другого класса, вам нужно будет открыть его через общедоступное свойство. (Именованные элементы XAML создают частные члены в своем определяющем классе).

+0

Вы определили мою проблему. Я слежу за проектом и не поймаю, что свойство должно было быть вручную загружено в словарь. Моя фраза относительно «объектов в другом файле», вероятно, была плохо написана. Я на самом деле пытался получить доступ к данным элемента (TreeViewItems) с другой страницы. Так было бы лучше сослаться на него как на элемент в заголовке и на почте? BTW, как я могу публично публиковать элемент XAML? – Alan

+0

Как говорится в ответе> «Если вы хотите получить доступ к именованному элементу XAML из другого класса, вам нужно будет открыть его через публичное свойство» – Schneider