2011-11-22 18 views
7

Aslen .xaml formum, Viewer'ın, modelin jenerik olmayan tip olduğu yerdeki Tasarımcının DataContext'ini ayarlamak için aşağıdaki satırı kullandı. Tasarım zamanı DataContext hakkında çalışma zamanında kullanılacak gerçek DataContext hakkında).WPF xaml formunu Design DataContext öğesini jenerik tip parametrelerini kullanan sınıfa nasıl ayarlayabilirim?

<Window ... 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
d:DataContext="{d:DesignInstance Dialogs:CustomerSearchDlogViewModel}" 
...> 

Şimdi yerine CustomerSearchDlogViewModel I jenerik SearchDialogViewModel var ama sözdizimi bana bu görünüm modeli belirtin izin <Pencere> etiketi çalışacak anlamaya olamaz. biçimlendirme uzantısı (DesignInstance) i şüphe tip argümanları, geçmek özellikleri sağlayan sürece mümkün değildir

public class CustomerSearchDialogViewModel : SearchDialogViewModel<Customer> 
{ 
} 

cevap

11

:

+0

İkincisini nasıl yapacağımı bilmiyorum, eğer bunu yaparsanız ve bir blog yazarsanız veya yardımcı olabilecek bir şey yazabilirim. – Tod

+0

@Tod: Bu büyük bir acı, çok fazla yansıma gerektiriyor ve biraz takılıyorum, eğer bir şey gelirse, cevabımı düzenler ve size söylerim. –

+0

@Tod: Sanırım bir şey buldum. –

1

Temiz seçenek sadece genel tür düzleştiren yeni bir tür oluşturmak olacaktır. Öyleyse, önerildiği gibi alt sınıflar isteyebilir veya genel örnekler yaratan kendi biçimlendirme uzantınızı yazabilirsiniz (aslında şu anda şu anda yapıyorum).

Düzenleme:

public class GenericObjectFactoryExtension : MarkupExtension { public Type Type { get; set; } public Type T { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { var genericType = Type.MakeGenericType(T); return Activator.CreateInstance(genericType); } } 

Başlangıçta ben bir tip-adından nesne türünü alma bazı sorunlar vardı ama XAML çözümleyici düzgün olan sizin için türünü çözmek sağlayabilirsiniz:
Bu eklenti yapmalı :

DataContext="{me:GenericObjectFactory Type={x:Type Dialogs:CustomerSearchDlogViewModel`1}, 
             T=Data:Customer}" 

(genel bir tür başvurmak için sonunda `1 Not Eğer hataya neden olur backtick sarma x:Type düşerse..)

+0

Zaten bir CustomerSearchDialogViewModel'im olduğundan, içeriğini silmek ve önerdiğiniz gibi yeniden tanımlamak güzel ve basit olacaktır (silmek yerine). Bunu düşünmedim, ne yapamayacağımı bulmak her zaman iyidir. – Tod

İlgili konular