WPF formundaki denetimleri bir arabirime bağlamaya çalışıyorum ve arabirimin özelliklerini bulamadığı bir çalışma zamanı hatası alıyorum.WPF bir arabirime bağlanılamıyor mu?
İşte XAML varpublic interface IPerson
{
string UserId { get; set; }
string UserName { get; set; }
string Email { get; set; }
}
public class Person : EntityBase, IPerson
{
public virtual string UserId { get; set; }
public string UserName { get; set; }
public virtual string Email { get; set; }
}
(bir alıntı): Burada
<TextBox Name="userIdTextBox" Text="{Binding UserId}" />
<TextBox Name="userNameTextBox" Text="{Binding UserName}" />
<TextBox Name="emailTextBox" Text="{Binding Email}" />
arkasında kod (yine bir alıntı):
İşte
Bir veri kaynağı olarak kullanıyorum sınıf var
var person = PolicyInjection.Wrap<IPerson>(new Person());
person.UserId = "jdoe";
person.UserName = "John Doe";
person.Email = "[email protected]";
this.DataContext = person;
Veri kaynağı olarak kullanıyorum sınıfın bir varlık olması gerektiğine dikkat edin; çünkü Politika Enjeksiyonu entlib'nin Politika Enjeksiyon Uygulama Bloğu.
Ben zamanında bu hatayı alıyorum: Ben EntLib politikası enjeksiyonu ile aşina değilim ama aslında sorun da burada yatıyor, ve eminim
System.Windows.Data Error: 16 : Cannot get 'Email' value (type 'String') from '' (type 'Person'). BindingExpression:Path=Email; DataItem='Person' (HashCode=22322349); target element is 'TextBox' (Name='emailTextBox'); target property is 'Text' (type 'String') TargetException:'System.Reflection.TargetException: Object does not match target type.
at System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at MS.Internal.Data.PropertyPathWorker.GetValue(Object item, Int32 level)
at MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)'
@Robert Jeppesen: Bu, PolicyInjection kodunun çalışmasına izin vermez. – user7116
Robert doğrudur - sorun, WPF veri bağlamasının PolicyInjection.Wrap'ın oluşturduğu proxy sınıfındaki özellikleri tanımıyor olmasıdır. Veri bağlama PI olmadan gayet iyi çalışıyor, bu yüzden onu kullanmayan bir iş bulmaya ihtiyacım var. –