У меня есть текстовое поле с двусторонней привязкой, но выдает ошибку TargetException
. Данные не загружаются в TextBox
, и когда я их набираю, я получаю эту ошибку:
System.Windows.Data Error: 8 : Cannot save value from target back to source. BindingExpression:Path=(local:Config.eventDateFormat); DataItem='String' (HashCode=-247125614); target element is 'TextBox' (Name='TXTB_Settings_Event_AddDateToName'); 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.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index)
at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
at System.Windows.Data.BindingExpression.UpdateSource(Object value)'
Вот мой XAML:
<TextBox x:Name="TXTB_Settings_Event_AddDateToName"
Text="{Binding (local:Config.eventDateFormat), Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap" Margin="110,200,1012,492"/>
Вот класс и свойство:
public class Config : INotifyPropertyChanged
{
private string _eventDateFormat = "MMM-dd-yy-";
public string eventDateFormat
{
get { return _eventDateFormat; }
set
{
if (value != _eventDateFormat)
{
_eventDateFormat = value;
OnPropertyChanged(nameof(eventDateFormat));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Я также пробовал это:
private string _eventDateFormat = "MMM-dd-yy-";
public string eventDateFormat
{
get { return _eventDateFormat; }
set
{
if (value != _eventDateFormat)
{
_eventDateFormat = value;
Changed();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void Changed([CallerMemberName] string property = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
DataContext для MainWindow:
this.DataContext = this;
У меня есть куча наблюдаемых коллекций, привязанных к другие элементы пользовательского интерфейса, поэтому я не могу изменить DataContext только на Config. Я попытался выполнить привязку к сетке, в которой они находились, но не смог ее скомпилировать.
Когда мой класс Config был stati c, я смог выполнить двустороннюю привязку, не реализовав INotifyPropertyChanged. Однако из того, что я читал, этот класс не должен быть c, поскольку он иногда обновляется.
Не уверен, актуален ли он, я использую MahApps Metro 2.0
Использование c# 4.6.1