codememo

WPF 오류 40 BindingExpression 경로 오류: '개체'에서 속성을 찾을 수 없습니다.

tipmemo 2023. 4. 13. 20:53
반응형

WPF 오류 40 BindingExpression 경로 오류: '개체'에서 속성을 찾을 수 없습니다.

제본 오류 때문에 책상에 머리를 박고 있어요나는 그 게시물들 중 몇 개를 체크했다.BindingExpression패스 에러가 발생하고, 내 상황에 맞는 것이 아무것도 표시되지 않습니다.

어쨋든, 난 'Custom control'을 가지고 있어IncrementingTextBox. 사용자가 '체크'할 때마다 비활성화하려고 합니다.CheckBox그 위에.

나는 에 구속이 있다.CheckBox IsChecked정상적으로 작동하고 있어야 할 때 발사되는 자산입니다.올바르게 설정되어 있다.UseSensorLength속성을 지정합니다.

단, 의 바인딩은IncrementingTextBox IsEnabled속성이 원인이 되고 있습니다.BindingExpression패스 에러가 발생하여 갱신되지 않습니다.

테스트로서 이면의 코드를 입력해 컨트롤을 유효/비활성화하려고 했는데 정상적으로 동작하고 있습니다만, Binding이 동작하지 않는 것 같습니다.

다음은 제 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"/>

다음은 Configuration Model의 일부입니다.

public bool DontUseSensorLength
{
    get { return !UseSensorLength; }
}

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

다음은 앱 실행 시 출력 창에 표시되는 오류 메시지입니다.

System.Windows.데이터 오류: 40: BindingExpression 경로 오류: '개체' '증분 텍스트 상자'(Name= 'video_length_textbox')에서 'ConfigurationModel' 속성을 찾을 수 없습니다.BindingExpression:Path=ConfigurationModel.DonTUseSensorLength; DataItem='IncrementingTextBox'(이름='video_length_textbox'), 대상 요소는 'IncrementingTextBox'(이름='video_length_textbox'), 대상 속성은 'IsEnabled'('Boolean 유형)입니다.

'UseSensorLength' 속성 바인딩은 정상적으로 작동하고 있지만 'DontUseSensorLength' 바인딩으로 인해 위의 'BindingExpression 경로 오류'가 발생하고 있습니다.

최근에 바인딩 오류를 읽는 방법에 대한 SO 답변을 작성했습니다.요약하면 콜론과 세미콜론의 오류 메시지에 줄 바꿈을 추가하여 아래에서 위로 읽습니다.

오류 메시지는 다음과 같습니다.

  • System.Windows.데이터 오류: 40:
    • BindingExpression 경로 오류: '개체' '증분 텍스트 상자'(Name='video_length_textbox')에서 'ConfigurationModel' 속성을 찾을 수 없습니다.
    • BindingExpression:Path=ConfigurationModel.Don't Use Sensor Length;
  • DataItem='IncrementingTextBox'(이름='video_length_textbox');
  • 대상 요소는 'IncrementingTextBox'(Name='video_length_textbox')입니다.
  • 대상 속성은 'IsEnabled'('Boolean' 유형)입니다.

이는 아래에서 위로 읽을 수 있습니다.

  • 는 " " " 입니다.IsEnabled 요소 IncrementingTextBox(예: video_length_textbox).

  • DataItem )DataContext의 )는 타입의 IncrementingTextBoxnamed named_video_length_textbox

  • 찾으려는 바인딩 표현은 다음과 같습니다.ConfigurationModel.DontUseSensorLength

  • 은 바인딩이 과 같이 되어 있다는 것입니다.ConfigurationModel 수 없습니다.IncrementingTextBox

당신의 ★★★★★★★★★★★★★★★★★★★.DataContext으로 설정되어 있고 "video_length_textbox"가 "video_length_textbox"는 "video_length_textbox"로 설정되어 .IncrementingTextBox에는 ''라는 .ConfigurationModel

네가 세팅하는 거 안 보이니까DataContext★★★★★★★★★★★★★★★★★★에IncrementingTextBox의 에서, XAML 의 합니다.IncrementingTextBoxclass.이 높은 중 의 Constructor에서 를 그 입니다.

this.DataContext = this;

또는 XAML

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

데이터를 꺼내는 오브젝트의 클래스가 취득되지 않아 그 속성에 대한 설정이 되어 있지 않았기 때문에 같은 문제가 있었습니다.

이 방법은 효과가 없었습니다.

public string Name;

하지만 이것은 성공했습니다.

public string Name{ get; set; }

저도 비슷한 경험을 했어요, Items(품목'콤보 상자의 소스 바인딩이 작동하지 않았습니다.

제 경우 사소한 실수였지만 트레이스 메시지를 활성화하기 전까지는 추적하기가 어려웠습니다.

목록을 부동산으로 바꾸는 것을 잊었을 뿐입니다.

// NOPE:
public List<string> Versions;
// YEP:
public List<string> Versions { get; set; }

이게 누군가에게 도움이 될지도...

public Window()
{
      this.DataContext = this;
      InitializeComponent();
}
public string Name {get;}
//xaml
<TextBlock Text="{Binding Name}"/>

성 。Nameshould be public ★★★★★★★★★★★★★★★★★」{ get; }

도 같은 저 에는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★boolBoolean바꾸자 마자 예상대로 되네.

확인해야 할 사항

1. 컨스트럭터의 Initialize Component 앞에 속성의 값을 할당합니다.

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


    }

    public double ScenarioHeight  { get;set;}

2. 사용자 컨트롤인 경우 바인딩에 userControl을 요소로 추가해야 합니다.

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

는 XAML 하여 이전에 수 없거나 하지 않는 할 수 .<ItemsSource>

했을 때ItemsSource올바른 값을 지정해도 XAML은 자동으로 항목 수집을 다시 만들지 않습니다.

제가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ListBoxUI - 성 ui ui ui ui ui ui :

여기에 이미지 설명 입력

내 모든 삭제 및 ItemSourcevalue입니다.

는 내 Shahid를 설정한 .DataContext할 수 있습니다.Loaded이치노컨스트럭터로 이동하면 문제가 해결되었습니다.

이 에러가 발생했기 때문에, 바인드처의 스트링을 프라이빗에서 퍼블릭으로 설정하는 것만으로 간단하게 할 수 있었습니다.

내 뒷부분을 쓰는 부주의한 실수.

언급URL : https://stackoverflow.com/questions/16173869/wpf-error-40-bindingexpression-path-error-property-not-found-on-object

반응형