WPF hata şablonunun WPF içinde bir UserControl içindeki bir denetimde görünmesini nasıl sağlarsınız?WPF içinde bir UserControl içindeki Denetimlerdeki Doğrulama Hatası Şablonunu Göster
İki Etiket, iki Metin Kutusu ve bir CheckBox içeren bir UserControl var. TextBox'lardan biri varlığın adını temsil eder ve benim Window'umun DataContext'i olan ViewModel'ım tarafından oluşturulan Model özelliğindeki bir Name özelliğine bağlıdır. Model sınıfı, IDataErrorInfo arabirimini uygular ve Birim Sınaması aracılığıyla, İsim boş olduğunda, özellik indeksleyici uygulaması aracılığıyla bir hata döndürüldüğünü doğruladım. UserControl'ümdeki Name TextBox'ı destekleyen Bağımlılık Özelliği'ne bağlı kaldım ve doğrulama hatasıyla karşılaşıldığında, WPF hata şablonu yalnızca Name TextBox yerine tüm UserControl etrafında kırmızı bir kenarlık yerleştiriyor.
UserControl'ün ad alanına bağlanma aşağıdaki gibidir. aşağıdaki gibi
<vc:MyUserControl ItemName="{Binding Model.Name, ValidatesOnDataErrors=True}" />
benim UserControl bir simiplified sürümü ve destek DependencyProperty olduğunu.
<UserControl>
<Grid>
<TextBox Text="{Binding ItemName}" />
</Grid>
</UserControl>
public partial class MyUserControl: UserControl
{
public static readonly DependencyProperty ItemNameProperty =
DependencyProperty.Register(
"ItemName",
typeof(string),
typeof(MyUserControl),
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
);
public string ItemName
{
get { return (string)GetValue(ItemNameProperty); }
set { SetValue(ItemNameProperty, value); }
}
}
Ben şimdiye kadar bütün Silverlight açısından olmuştur bu konuya ilişkin ya da (bana mantıklı gelmedi) kırmızı sınır göstermeyen için bir dönüştürücü kullanarak bulduk bilgiler. Bu bilginin hepsi burada stackoverflow üzerinde bulundu.
Bu sorunu WPF ile çözebilecek biri var mı? Açık bir şey mi görüyorum? UserControl
için
İlgili soru [burada] (http://stackoverflow.com/q/7808986/620360) ve [burada] (http://stackoverflow.com/q/1198342/620360) – LPL
sayesinde, LPL. Bu konuda yaptığım araştırmalarda her iki soruyu da görmüştüm. İkinci linkte kabul edilen cevap, benim sorularımda bahsettiğim dönüştürücünün kullanımıdır. Bu benim için çok yanlış görünüyor. İlk sorudaki kabul edilen cevap benim için de işe yaramıyordu. – CoderDawson