使用字符串[]在XAML
您可以在XAML實例化你的關鍵詞屬性,如下所示:
<MyControl ...>
<MyControl.Keywords>
<sys:String>Happy</sys:String>
<sys:String>Sad</sys:String>
<sys:String>Angry</sys:String>
</MyControl.Keywords>
</MyControl>
注:這是假定空間聲明
xmlns:sys="clr-namespace:System;assembly=mscorlib"
你可以將ItemsControl綁定到您的關鍵字,如下所示:
<ListBox ItemsSource="{Binding Keywords}" ...>
在此示例中,每個關鍵字將顯示爲單獨的ListBox項目。
只要數組成員保證永不改變(可以用新數組替換數組,但不能更改其元素),在WPF中爲此目的使用一個字符串[]是完全可以理解的。這是因爲數組沒有更改通知機制。
如果你的元素可能會改變
如果你的關鍵詞數組中的元素可能會改變,你應該使用一個ObservableCollection,而不是一個數組。使其成爲只讀CLR屬性(不是依賴項屬性)並在構造函數中初始化它。然後,您可以完全按照上圖所示將其填充到XAML中,但對集合的任何更改都會立即反映在您的UI中。
我實際上使用我自己的集合類,它比ObservableCollection有更多的功能。只要它實現INotifyCollectionChanged,不管你使用什麼集合類。
製作用純XAML
使用綁定,無法更新您的關鍵字數組列表更新。如果您需要更新關鍵字並希望完全使用XAML和綁定來完成此操作,則需要創建一個包含該字符串的Keyword對象類,然後將它們放入ObservableCollection或類似對象中。
的IValueConverter
另一種方法是使用的IValueConverter以逗號分隔的字符串列表轉換和從字符串[],就像這樣:
<TextBox Text="{Binding Keywords,
Converter={x:Static my:CommaSeparatedConverter.Instance}}" />
,其中轉換器將:
public class CommaSeparatedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Join(",", (string[])value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((string)value).Split(',');
}
}
我x上得到一個錯誤:數組(類型「X:陣」未找到)。在文檔xmlns之前:x被定義爲「http://schemas.microsoft.com/winfx/2006/xaml」,而x:在頁面中的其他地方像正常一樣工作。 – Hounshell 2010-11-10 22:02:59
另外,是否有更多的WPF-ISH方式來做到這一點?就像一個可觀察的集合或其他東西。我不會更新列表,只是偶爾檢查它。 – Hounshell 2010-11-10 22:09:28
由於關鍵字被聲明爲字符串[],因此實際上並不需要XAML中的x:Array語法。我從我的答案中刪除了它。 (我很困惑,爲什麼它不爲你工作:我用x:數組經常和它聽起來像你做正確),我還添加了有關何時以及更多信息,爲什麼你可能會改用的ObservableCollection x的:數組。 – 2010-11-11 00:06:53