databound 속성 검사를 도와주세요.FrameworkElement.GetBindingExpression은 데이터 바인딩 된 요소에 대해 null을 반환합니다.
내가 특정 속성에 대한 XAML에서 사용 바인딩 된 여부를 그래서 내가 쓴 한 코드var uielement = something as FrameworkElement;
if (uielement != null)
{
var sizeBinding = new[] { FrameworkElement.WidthProperty, FrameworkElement.HeightProperty }.Select(_ => uielement.GetBindingExpression(_)).ToList();
if (sizeBinding.Count(_ => _ != null) > 0)
{
Trace.WriteLine(string.Format("found {0} bindings", sizeBinding.Count()));
}
}
처럼 내가
Height
와 XAML 요소에이 문제를 확인했습니다 및
Width
속성에 바인딩 확인하고 싶습니다
데이터 컨텍스트
<UserControl Width="{Binding Size.Width, Mode=TwoWay}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
이 워크 부재 너비 및 높이의 속성을 가지고 그 속성에 바인딩이 적용되었다 (GetBindingExpression
방법을 사용하여) 검사한다. 크기는 System.Windows.Size 형식의 데이터 컨텍스트 개체의 속성입니다.
위의 C# 코드는 xaml 코드에서 올바르게 작동합니다. 그러나 식 바인딩
<UserControl Width="{Binding Size.Width}"
Height="{Binding Size.Height, Mode=TwoWay}"
> ... </UserControl>
처럼 simpliest 형태를 갖는 경우 다음 sizeBinding는 제 1 엘리먼트 (폭)과 높이가 널 바인딩 식 결합 인스턴스를 갖는다. Mode = TwoWay with binding으로 살 수는 있지만 Mode가 TwoWay로 설정되어 있지 않으면 바인딩 인스턴스가 생성되지 않은 이유를 알고 싶습니다. 나는 표현이 더 복잡한 다음 경로가 필요하기 때문에 이것이라고 생각했습니다. 그러나 나는 Width="{Binding Size.Width, Mode=OneWay}"
을 시도했지만 GetBindingExpression
은 이와 같은 바인딩에 대해 null을 반환합니다. BindingOperations
GetBinding * 메서드를 시도했지만 정확히 FrameworkElement.GetBindingExpression
과 똑같은 동작을합니다.
내가봤을 유일한 질문은 this one입니다. 하지만 그것은 나를 위해 명확하지 않다
당신 말이 맞아요. 나는'Uid' 속성을 바인딩하려고 시도했고 GetBindingEpression이 작동합니다. 그러나 폭과 높이가 명시 적으로 설정된 곳을 찾지 못했습니다. 컨트롤이 렌더링 될 때 wpf 엔진에서있을 수 있습니다. 설명해 주셔서 감사합니다. – oleksa