如何在xaml中設置string []屬性的值?有一個屬性字符串數組作爲XAML中逗號分隔的字符串
我HAVA控制:字符串[] PROPNAME
我想設置這個屬性在明年方式的價值:
<ns:SomeControl PropName="Val1,Val2" />
如何在xaml中設置string []屬性的值?有一個屬性字符串數組作爲XAML中逗號分隔的字符串
我HAVA控制:字符串[] PROPNAME
我想設置這個屬性在明年方式的價值:
<ns:SomeControl PropName="Val1,Val2" />
您可以使用the <x:Array>
markup extension,但其語法非常冗長。
另一個選擇是創建自己的TypeConverter
可以從逗號分隔的列表轉換爲數組:
class ArrayTypeConverter : TypeConverter
{
public override object ConvertFrom(
ITypeDescriptorContext context, CultureInfo culture, object value)
{
string list = value as string;
if (list != null)
return list.Split(',');
return base.ConvertFrom(context, culture, value);
}
public override bool CanConvertFrom(
ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
return true;
return base.CanConvertFrom(context, sourceType);
}
}
如果你轉換到了你的類型的類型,你可以再申請the [TypeConverter]
attribute到那種類型。但既然你想轉換爲string[]
,你不能那樣做。所以,你必須該屬性適用於那些要使用該轉換器的所有屬性:
[TypeConverter(typeof(ArrayTypeConverter))]
public string[] PropName { get; set; }
的想法是在資源定義自定義值數組控制/窗口,然後只用綁定到一個靜態資源:
<!-- or Window.Resources -->
<UserControl.Resources>
<x:Array x:Key="CustomValues"
Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Val1</sys:String>
<sys:String>Val2</sys:String>
</x:Array>
</UserControl.Resources>
<!-- Then just bind -->
<ns:SomeControl PropName="{Binding Source={StaticResource CustomValues}}" />
sll's answer是偉大的,但你可以避開資源,如果你想和值直接寫入控制:
<ns:SomeControl>
<ns:SomeControl.PropName>
<x:Array Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Val1</sys:String>
<sys:String>Val2</sys:String>
</x:Array>
</ns:SomeControl.PropName>
</ns:SomeControl>
此外,您可以將xmlns:
聲明移動到head元素(Window,UserControl等)中,因此您不會使用它控制屬性。如果你是一個正在開發SomeControl
,我會使用svick's approach並提供一個TypeConverter。
爲什麼綁定到'StaticResource'?爲什麼資源? – Snowbear
+1,這是在編譯時知道值的方法。現在,如果他需要動態值(運行時值,綁定等),他將需要一個返回數組的I(多)ValueConverter。 –
@Snowbear:這就是我現在所知道的,我將不勝感激任何更高級的解決方案,爲什麼你刪除了你的答案並且沒有提供答案?真的我沒有其他想法如何做到這一點,所以將+1,如果你顯示其他方式,在此先感謝 – sll