2017-02-14 74 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; } 
} 
相關問題