Как программно добавить новый элемент в массив x: Array из Window.Resources - PullRequest
1 голос
/ 08 апреля 2019

У меня есть этот код XAML:

<Window.Resources>
    <x:Array x:Name="arrayXAML" x:Key="WordList" Type="sys:String">
      <sys:String>Abraham</sys:String>
      <sys:String>Xylophonic</sys:String>

      <sys:String>Yistlelotusmoustahoppenfie</sys:String>
      <sys:String>Zoraxboraxjajaja</sys:String>
    </x:Array>
</Window.Resources>

Я знаю, что могу получить доступ к этому массиву с помощью обеих этих строк c #:

Object res1 = this.Resources["WordList"];
wordList = this.FindResource("WordList") as string[];

Но что если я захочудобавить новую строку в массив x: Array?

Я пытался: arrayXAML.Items.Add("hello");, но, кажется, он не работает, когда я использую «FindRescource», как показано выше.Есть ли способ добавить элементы в этот массив?

1 Ответ

1 голос
/ 08 апреля 2019

В XAML x:Array представлен классом ArrayExtension.

См. x:Array на MSDN :

В реализации .NET Framework XAML Services обработка этого расширения разметки определяется классом ArrayExtension.

Важно понимать, что то, что вы имеете / получаете в / от вашего ResourceDictionary, это не ArrayExtension, а string[].
Время изменения arrayXAML вы не увидите в ResourceDictionary.

Вы не можете добавить новый элемент в string[], см. ссылку , но вы можете установить новое значение в ключе ResourceDictionary forWordList:

var sarr = this.Resources["WordList"] as string[];
var newSarr = new string[sarr.Length+1];
for (int i = 0; i < sarr.Length; i++)
{
    newSarr[i] = sarr[i];
}

newSarr[newSarr.Length-1] = "New string from code behind";          
this.Resources["WordList"] = newSarr;

Примечание: Поскольку вы модифицируете ресурс, используйте DynamicResource:

<ListBox ItemsSource="{DynamicResource WordList}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...