我需要编写什么来初始化具有非基本属性的对象。
与拥有以下Model和ViewModel时相似:
public class ListEntry
{
public int ID { get; set; }
public string IP { get; set; }
}
public class ViewModel
{
public ObservableCollection<ListEntry> ListEntries { get; set; }
}
然后我可以编写这个XAML DesignData:
<nc:ViewModel
xmlns:nc="clr-namespace:NetWorkItOut.NetworkClasses">
<nc:ViewModel.ListEntries>
<nc:ListEntry ID="1" IP="192.168.178.1" />
<nc:ListEntry ID="2" IP="192.168.178.255" />
</nc:ViewModel.ListEntries>
</nc:ViewModel>
一切正常。但在更换时
public string IP { get; set; }
带
public IPAddress IP { get; set; }
这不起作用(因为IPaddress没有带字符串的构造函数。
那我怎么解决这个问题呢? (使用设计数据显示IP值)
答案 0 :(得分:1)
一种简单的方法是将IPAddress
包含一个额外的string
属性:
public IPAddress IP { get; set; }
public string StringIP
{
get
{
return IP.ToString();
}
set
{
IP = IPAddress.Parse(value);
}
}
现在您可以使用wrapped属性来设置IP:
<nc:ListEntry ID="2" StringIP="192.168.178.255" />
答案 1 :(得分:1)
创建一个TypeConverter
,可将string
转换为IPAddress
:
using System.ComponentModel;
...
public class IPAddressConverter : TypeConverter
{
public override bool CanConvertFrom(
ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string);
}
public override object ConvertFrom(
ITypeDescriptorContext context, CultureInfo culture, object value)
{
return IPAddress.Parse((string)value);
}
}
为TypeConverter
属性注册IP
,如下所示:
public class ListEntry
{
public int ID { get; set; }
[TypeConverter(typeof(IPAddressConverter))]
public IPAddress IP { get; set; }
}