NewsServer
nesnesinin orijinal örneği değiştirilmediğinden değiştirilmemiştir.
newsServer = original instance
_newsServer = clone of original instance (possibly modified)
DataContext = clone of original instance (possibly modified)
nesneler referans tipleri Ödeviniz, olduğunu unutmayın: Tamam düğmesi aşağıdaki gibi referanslar olacak tıklandığında sonra
newsServer = original instance
_newsServer = original instance
DataContext = clone of original instance
: En yapıcısı denir sonra aşağıdaki üç NewsServer
referanslara sahip _newsServer
için sadece referansını güncelliyorsunuz, nesnenin kendisinin değerini değil.
NewsServer
nesnesinin güncellenmesine izin vermek için, akla gelen iki seçenek vardır, diğer seçenekler muhtemelen var, ilki muhtemelen en basit olanıdır.
- yerine üzerinde güncelleme yöntemini çağırın ve
DataContext
referans değer geçirir _newsServer
alanına yeni atama işleminin ardından yerine NewsServer
nesne üzerinde bir void Update(NewsServer source)
yöntemi uygulamak.
_newsServer
değerini bir ortak/dahili özellik ile ortaya çıkarın. Bunu çeşitli mekanizmalarla kullanabilirsiniz: özellik değeri değiştiğinde ortaya çıkan bir olaya açıkça yanıt verin; özelliğe bağlamak (örneğin, bir bağımlılık özelliği yapmak veya INotifyPropertyChanged
uygulamak); veya ShowDialog()
yönteminin true
değeri ile döndüğünde, arayanın değeri almasını beklemeniz yeterlidir.
Arayanın biraz mantığını geri yüklerseniz, iletişim sınıfınızın daha basit olabileceğini unutmayın. Özellikle, bir yaklaşım sadece klonlanmış nesneyi bir özellik aracılığıyla arayan kişiye maruz bırakılır (örn. _newsServer
alanından kurtulmak ve sadece DataContext
kullanın). Bu nesne, diyaloğun elemanlarına önceden olduğu gibi bağlanacaktır. Arayan kişi bu örneğin referansını, ShowDialog()
yönteminden true
sonucundan alır. Örneğin
: klonlanmış nesne iletişim yapılması durumunda, sadece bir arayan tarafından göz ardı ve böylece ShowDialog()
yöntem false
döndürür olur
NewsServer newsServer = ...;
EditServerDialog editServerDialog = new EditServerDialog(newsServer);
if (editServerDialog.ShowDialog() == true)
{
newsServer = editServerDialog.DataContext;
}
. DataContext
özelliğini yukarıda gösterildiği gibi yeniden kullanabilirsiniz veya DataContext
özellik değerini döndüren farklı bir özellik (örneğin, NewsServer
olarak adlandırılır) oluşturabilir (kodun iletişim sınıfının genel arabirimiyle ilgili daha net olması için).
Bağlama kurulumunu gösterirseniz yardımcı olabilir. –
Ciltleme örneği: {Binding NeedAuthentication, UpdateSourceTrigger = LostFocus, Mode = TwoWay}. Bu.DataContext doğru verileri içerdiğinden, bağlayıcı doğrudur. – ErikTJ