Вы получаете массив размера 1, содержащий исходное значение:
Input Output
----- ------
thirty-two {"thirty", "two"}
five {"five"}
Вы можете увидеть это в действии в следующей программе:
class Test {
static void checkResult (String input) {
String [] arr = input.split ("\\-");
System.out.println ("Input : '" + input + "'");
System.out.println (" Size: " + arr.length);
for (int i = 0; i < arr.length; i++)
System.out.println (" Val : '" + arr[i] + "'");
System.out.println();
}
public static void main(String[] args) {
checkResult ("thirty-two");
checkResult ("five");
}
}
, которая выводит:
Input : 'thirty-two'
Size: 2
Val : 'thirty'
Val : 'two'
Input : 'five'
Size: 1
Val : 'five'
Во-первых, не делайте этого. Вместо того, чтобы диктовать UI из вашей виртуальной машины, вы должны диктовать данные (модель). Другими словами, тип свойства должен быть ObservableCollection
. Тогда ваше представление будет связываться следующим образом:
<ItemsControl ItemsSource="{Binding FormFields}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Обычно это определяется в разделе .Resources
родительского элемента. То есть Window.Resources
или WrapPanel.Resources
.
Сказав это, вы можете использовать ContentPresenter
для получения StackPanel
и вставьте его в визуальное дерево:
<ContentPresenter Content="{Binding FormFields}"/>
Вы пробовали использовать Border
или просто обычную сетку
?
<Border Content="{Binding FormFields}" />
Тем не менее, я сомневаюсь в дизайне. Поля формы должны находиться в представлении, а представление должно быть указано в шаблоне данных, который создается на основе типа модели представления. Я бы лично не стал делать то, что вы делаете в коде.
Ура.