2017-02-14 56 views
0

我需要用非原始属性初始化对象的代码。使用非原始属性实例化XAML对象

具有下列型号和视图模型时一样:

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 IPAddress IP { get; set; } 

更换

public string IP { get; set; } 

时,这不起作用(因为名称IP地址没有构造函数的字符串。

所以,我怎么能解决这个问题?(显示与IP值设计数据)

+0

可能的重复[如何序列化包含在System.Net.IPAddress属性的类?](http://stackoverflow.com/questions/24139723/how-to-serialize-a-classes-that-included-在系统净ip地址属性) –

回答

1

一个简单的方法是将IPAddress换成string属性:

public IPAddress IP { get; set; } 
public string StringIP 
{ 
    get 
    { 
     return IP.ToString(); 
    } 
    set 
    { 
     IP = IPAddress.Parse(value); 
    } 
} 

现在你可以使用包装的属性来设置IP:

<nc:ListEntry ID="2" StringIP="192.168.178.255" /> 
1

创建TypeConverter,它把来自stringIPAddress

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); 
    } 
} 

注册TypeConverterIP财产一样这个:

public class ListEntry 
{ 
    public int ID { get; set; } 

    [TypeConverter(typeof(IPAddressConverter))] 
    public IPAddress IP { get; set; } 
}