form databind data c# wpf xaml binding

c# - databind - WPF Error 40 BindingExpression error de ruta: propiedad no encontrada en ''object''



data binding c# (5)

Me estoy golpeando la cabeza en mi escritorio con este error de enlace. He revisado varias publicaciones para el error de ruta de BindingExpression y no puedo ver nada que funcione con mi situación.

De todos modos, tengo un control personalizado llamado IncrementingTextBox . Intento desactivarlo cada vez que el usuario ''revisa'' el CheckBox sobre él.

Tengo un enlace en la propiedad CheckBox IsChecked que funciona bien y se activa cuando se supone que debe hacerlo. Está configurando correctamente la propiedad UseSensorLength en ConfigurationModel.

Sin embargo, el enlace en la propiedad IsEnabled IncrementingTextBox está causando un error de ruta BindingExpression y por lo tanto no se actualiza en absoluto.

Como prueba, probé con el código subyacente para habilitar y deshabilitar el control y funciona muy bien, pero parece que no puedo hacer que el Enlace trabaje en él.

Aquí hay un fragmento de mi xaml:

... DataContext="{Binding RelativeSource={RelativeSource Self}}" ... ... <CheckBox Content="Use Sensor Length" Margin="30,6,0,0" IsChecked="{Binding ConfigurationModel.UseSensorLength, Mode=TwoWay}"/> <local:IncrementingTextBox x:Name="video_length_textbox" Margin="0,0,0,5" IsTextEnabled="False" IsEnabled="{Binding ConfigurationModel.DontUseSensorLength}" ValueChanged="VideoEventValueChanged"/>

Y aquí hay un fragmento de mi ConfigurationModel:

public bool DontUseSensorLength { get { return !UseSensorLength; } } public bool UseSensorLength { get { return _useSensorLength; } set { _useSensorLength = value; OnPropertyChanged("UseSensorLength"); OnPropertyChanged("DontUseSensorLength"); } }

Aquí está el mensaje de error que recibo en la ventana de salida cuando ejecuto la aplicación:

Error de System.Windows.Data: 40: Error de ruta de BindingExpression: la propiedad ''ConfigurationModel'' no se encuentra en ''object'' '''' IncrementingTextBox ''(Name ='' video_length_textbox '')''. BindingExpression: Path = ConfigurationModel.DontUseSensorLength; DataItem = ''IncrementingTextBox'' (Name = ''video_length_textbox''); el elemento objetivo es ''IncrementingTextBox'' (Name = ''video_length_textbox''); la propiedad de destino es ''IsEnabled'' (escriba ''Boolean'')

Recuerde, el enlace de la propiedad ''UseSensorLength'' está funcionando bien, pero el enlace ''DontUseSensorLength'' está causando el ''error de ruta de BindingExpression'' anterior.


Este error también puede ocurrir cuando anteriormente intentaba vincular una instancia de Enumerable inaccesible o no existente utilizando la propiedad XAML <ItemsSource>

Cuando corrige el ItemsSource con el valor correcto, XAML no vuelve a inicializar automáticamente la colección de elementos.

Entonces, cuando estaba usando la IU ListBox - lista de representación me enfrenté a esto en las propiedades:

La clave está en eliminar todos los elementos de la colección y corregir el valor de ItemSource .


Pocas cosas para verificar

1. asignar valores en las propiedades antes de InitializeComponent en el constructor

public partial class SampleClass: UserControl { public SampleClass() { ScenarioHeight = System.Windows.SystemParameters.WorkArea.Height - 350; InitializeComponent(); } public double ScenarioHeight { get;set;}

2. si es un control de usuario asegúrese de agregar userControl como Element en el enlace

<ScrollViewer Name="sv" Height="{Binding Path=ScenarioHeight, ElementName=ucSampleClass}" >


Recientemente escribí otra answer SO sobre cómo leer los errores de enlace para que tengan más sentido. Para resumir, agregue saltos de línea a su mensaje de error en los dos puntos y coma y léelo de abajo hacia arriba.

Su mensaje de error es:

  • System.Windows.Data Error: 40:
    • Error de ruta BindingExpression: la propiedad ''ConfigurationModel'' no se encuentra en ''object'' '''' IncrementingTextBox ''(Name ='' video_length_textbox '')''.
    • BindingExpression: Path = ConfigurationModel.DontUseSensorLength;
  • DataItem = ''IncrementingTextBox'' (Name = ''video_length_textbox'');
  • el elemento objetivo es ''IncrementingTextBox'' (Name = ''video_length_textbox'');
  • la propiedad de destino es ''IsEnabled'' (escriba ''Boolean'')

Esto puede leerse de abajo arriba como:

  • La falla de enlace es la propiedad IsEnabled de un elemento de tipo IncrementingTextBox (named video_length_textbox).

  • El DataItem ( DataContext ) del elemento es un objeto de tipo IncrementingTextBox named video_length_textbox

  • La expresión de enlace que está tratando de encontrar es ConfigurationModel.DontUseSensorLength

  • Y el problema que está teniendo el enlace es que la propiedad ConfigurationModel no se encuentra en el objeto de contexto de datos IncrementingTextBox

Así que su DataContext para "video_length_textbox" está configurado a sí mismo, y su clase IncrementingTextBox no tiene una propiedad pública llamada ConfigurationModel

Como no veo configurar el DataContext para su IncrementingTextBox en ninguna parte de su XAML, consulte el código de su clase IncrementingTextBox . El caso más probable es que esté configurando el DataContext para sí mismo en el Constructor

this.DataContext = this;

o el XAML

DataContext="{Binding RelativeSource={RelativeSource Self}}"


Tuve el mismo problema porque la clase de objeto de la que estaba extrayendo datos no tiene get; y establecer; en sus propiedades.

esto no funcionó

public string Name;

pero esto funcionó:

public string Name{ get; set; }


Tuve el mismo problema y en mi caso estaba usando bool lugar de Boolean . Tan pronto como lo cambié, está funcionando como se esperaba.