У меня есть класс на сервереWPF Databinding проблема WCF [MessageContract] класса
[MessageContract]
public class RemoteFileInfo : IDisposable, INotifyPropertyChanged
{
[MessageHeader(MustUnderstand = true)]
public string _FileName;
[MessageHeader(MustUnderstand = true)]
public string FileName
{
get { return _FileName; }
set { _FileName = value; }
}
[MessageBodyMember(Order = 1)]
public System.IO.Stream _FileByteStream;
[MessageHeader(MustUnderstand = true)]
public System.IO.Stream FileByteStream
{
get { return _FileByteStream; }
set { _FileByteStream = value; }
}
public void Dispose()
{
// close stream when the contract instance is disposed.
// this ensures that stream is closed when file download
// is complete, since download procedure is handled by the client
// and the stream must be closed on server.
if (_FileByteStream!=null)
{
_FileByteStream.Close();
_FileByteStream = null;
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
я общаюсь с моим сервером через WCF. Этот класс будет [MessageContract] из-за потоковой передачи - (все мои другие классы используют [DataContract] в любом случае).
Моя проблема заключается в том, что после того, как я генерировать классы с SvcUtil на стороне клиента, я потерял Inotify ... интерфейс ... Я получаю это:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="RemoteFileInfo", WrapperNamespace="http://tempuri.org/", IsWrapped=true)]
public partial class RemoteFileInfo
{
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public System.IO.Stream FileByteStream;
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public string FileName;
[System.ServiceModel.MessageHeaderAttribute(Namespace="http://tempuri.org/")]
public string _FileName;
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tempuri.org/", Order=0)]
public System.IO.Stream _FileByteStream;
public RemoteFileInfo()
{
}
public RemoteFileInfo(
System.IO.Stream FileByteStream,
string FileName,
string _FileName,
System.IO.Stream _FileByteStream)
{
this.FileByteStream = FileByteStream;
this.FileName = FileName;
this._FileName = _FileName;
this._FileByteStream = _FileByteStream;
}
}
Без INotifyPropertyChanged привязки данных не работает, я знаю, но я могу добавить его на стороне клиента, как я это делал:
public partial class RemoteFileInfo : System.ComponentModel.INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
#endregion
}
Но все же привязка данных не работает. Есть ли у вас какие-либо идеи? Я не могу использовать привязку данных с классом [MessageContract] вообще?
Спасибо за ваши ответы заранее!
ОК. Спасибо за быстрый ответ! Я думал, но теперь я это знаю :). Но я до сих пор не понимаю, почему я не смог правильно связать себя, когда пытался добавить интерфейс на локальной стороне - как вы видите это в последней части моей заметки. Вы знаете? – Hunsoul
Но вы никогда не поднимали это событие, не так ли? Я не знаю WPF, но, конечно же, для повышения этого события должен быть какой-то код, иначе WPF не будет знать об изменениях. –