Bạn có thể sử dụng the <x:Array>
markup extension, nhưng cú pháp của nó khá dài dòng.
Một lựa chọn khác là tạo ra riêng TypeConverter
của bạn mà có thể chuyển đổi từ danh sách bằng dấu phẩy để một mảng:
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);
}
}
Nếu loại bạn được chuyển sang là kiểu của bạn, bạn có thể sau đó áp dụng the [TypeConverter]
attribute loại đó. Nhưng vì bạn muốn chuyển đổi thành string[]
, bạn không thể làm điều đó. Vì vậy, bạn phải áp dụng thuộc tính cho tất cả các thuộc tính mà bạn muốn sử dụng chuyển đổi này:
[TypeConverter(typeof(ArrayTypeConverter))]
public string[] PropName { get; set; }
Tại sao phải ràng buộc với 'StaticResource'? Tại sao lại là tài nguyên? – Snowbear
+1, đây là cách để đi cho các giá trị được biết đến tại thời gian biên dịch. Bây giờ nếu anh ta cần các giá trị động (các giá trị thời gian chạy, bị ràng buộc, vv), anh ta sẽ cần một ValueConverter của tôi (Multi) trả về một mảng. –
@Snowbear: đây là những gì tôi biết bây giờ, tôi sẽ đánh giá cao bất kỳ giải pháp nâng cao hơn, tại sao bạn đã xóa câu trả lời của bạn và không cung cấp một câu trả lời? Thực sự tôi không có ý tưởng nào khác về cách làm như vậy sẽ +1 nếu bạn thể hiện một cách khác, cảm ơn trước – sll