“KarliCards_GUI.NumberOfPlayers”类型的对象不能应用到要求为“System.String”类型的属性中。 KarliCards GUI D:\C#\Chapter14\KarliCards GUI\Options.xaml 34
public Options()
{
if (_gameOptions == null)
{
if (File.Exists("GameOptions.xml"))
{
using (var stream = File.OpenRead("GameOptions.xml"))
{
var serializer = new XmlSerializer(typeof(GameOptions));
_gameOptions = serializer.Deserialize(stream) as GameOptions;
}
}
else
_gameOptions = new GameOptions();
}
DataContext = _gameOptions;
InitializeComponent();
}
public class NumberOfPlayers : ObservableCollection<int>
{
public NumberOfPlayers() : base()
{
Add(2);
Add(3);
Add(4);
}
}
WPF中int转换为string是标准转换啊,为何这里出错???求大神解答
2.ToString();
3.ToString();
4.ToString();
Add(2.ToString());
你的问题应该出现在XML反序列化GameOptions的时候
GameOptions类中应该包含NumberOfPlayers。
序列化GameOptions时,NumberOfPlayers是序列化成string?这样反序列化时,就出现你那这样的问题。
有2个建议
1. 列表还是要序列化成列表, 参考XmlArray, XmlArrayItem等特性 (这是比较好的做饭)
2. 通过一个代理Property(string类型), 例如IpAddressProxy属性就是IpAddress属性的代理,虽然序列化或者反序列化XML是操作的是IPAddressProxy,但实际上是改了IpAddress的值。
** [XmlIgnore]**
public IPAddress IpAddress { get; set; }
**[XmlAttribute(AttributeName = "IpAddress")]**
public string IpAddressProxy
{
get { return IpAddress == null ? null : IpAddress.ToString(); }
set { IpAddress = IPAddress.Parse(value); }
}