모든 파생 클래스가 INotifyPropertyChanged 메서드 및 이벤트에 액세스 할 수 있도록 내 ModelBase 클래스에 INotifyPropertyChanged를 구현하고 있습니다.Caliburn.Micro IsNotifying 속성을 serialize하지 마십시오
IModelBase 인터페이스에서 INotifyPropertyChangedEx를 구현하고 내 ModelBase 클래스에서 PropertyChangedBase를 확장하여 프로젝트에서 Caliburn.Micro를 사용하고 있습니다.
PropertyChangedBase의 IsNotifying 속성이 내 모델과 직렬화되는 것을 제외하면이 모든 기능이 훌륭합니다. 나는 몇 가지 시도했지만 직렬화를 중지 할 수 없었습니다.
ModelBase에서 IsNotifying를 재정의하고 [XmlIgnore] 속성을 속성에 추가했습니다. 내 ModelBase 클래스에서 새 키워드를 사용하여 IsNotifying을 숨기려고했습니다. 이들 중 어느 것도 효과가 없었다.
github에서 PropertyChangedBase 코드를 복사하고 내 PropertyChangedBase 클래스에 넣은 다음 [XmlIgnore]를 IsNotifying 속성에 추가했습니다. 이것은 효과적이지만 이상적인 것은 아닙니다.
아이디어가 있으십니까? 이 작업을 수행 할 수 있습니까? 방금 Caliburn.Micro PropertyChangedBase를 사용하여 스크랩하고 내 도구를 구현해야합니까? INotifyPropertyChanged를 구현하는 것은 어렵지 않습니다. Caliburn.Micro에서 이미 라이브러리를 사용하고 있기 때문에 사용하려고했습니다.
이 콘솔
using System;
using System.IO;
using System.Xml.Serialization;
using Caliburn.Micro;
namespace CaliburnPropertyChangedBase
{
internal class Program
{
private static void Main()
{
var myModel = new MyModel {SomeProperty = "Test"};
Console.WriteLine(myModel.SerializeObject());
Console.ReadKey();
}
}
public static class XmlHelper
{
public static string SerializeObject<T>(this T toSerialize)
{
var xmlSerializer = new XmlSerializer(toSerialize.GetType());
using (var textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
}
}
public interface IModelBase : INotifyPropertyChangedEx
{
}
public class ModelBase : PropertyChangedBase, IModelBase
{
}
public interface IMyModel : IModelBase
{
string SomeProperty { get; set; }
}
public class MyModel : ModelBase, IMyModel
{
public string SomeProperty { get; set; }
}
}
이에 XML을 쓰는 간단한 예입니다 귀하의 SerializeObject<T>
방법에서 출력
<?xml version="1.0" encoding="utf-16"?>
<MyModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<IsNotifying>true</IsNotifying>
<SomeProperty>Test</SomeProperty>
</MyModel>
. 그것은 내 응용 프로그램에 문제가 발생하지 않습니다. 거기에있는 것이 옳지 않습니다. 다른 사람이 우리의 XML을 사용한다면, 우리는 그 속성을 무시하도록해야 할 것입니다. – Marc