0

에 대한 종속성 속성 및 OneWayToSource에 Grid.Visibility의 한방향 바인딩 나는 그리드이되는 가시성 속성이 으로 IsExpanded 부모 확장기 제어에 바인딩해야합니다. Grid.Visibility 변경, 내가 의 DataContext (뷰 모델)의 속성 (MyProperty)를 따라 변경할 때마다WPF는 : 뷰 모델 CLR 속성

.

내 XAML입니다 :

<Grid Visibility="{Binding IsExpanded, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Expander}}, Converter={StaticResource BoolToVisibilityConverter}}" /> 

내가 프로그래밍 사용하여 뷰 생성자에서 바인딩을 설정 시도했다 : 이것은 단지 이미 설정 한 확장기에 바인딩을 대체 그러나

grid.SetBinding(VisibilityProperty, new Binding("MyProperty") { Source = DataContext }); 

XAML에서

나는 대상이 내보기 모델이고 소스가 대신하고 종속성 속성에 MyProperty을 ( 가시성에 바인딩) 그리드되도록 주변이 내리고 고려했다. 그러나 내 뷰 모델은 DependencyObject이 아니므로이 작업을 수행 할 수 없습니다.

I는에가 및 MyProperty을 Expander.IsExpanded MultiBinding/MultiConverter 결합 Grid.Visibility 사용하여 시도했지만, 이것은 원하는 효과가 없다. Grid.Visibility의 결과로 업데이트 될 때 MyPropertyGrid.Visibility로 변경되지 않습니다 변화를 Expander.IsExpanded.

을 Expander.IsExpanded 다음 프로그램 Grid.Visibility에게 때마다 연결된 속성 변경을 변경하는 콜백 기능을 사용하려면 결합 그리드에 연결된 속성을 사용하고 작동하는 것 같다 유일한 옵션을 선택합니다. Grid.VisibilityMyProperty에 바인딩됩니다. 이것은 단지 그것을하는 지저분한 방법처럼 보이지만, 나는 제안에 개방적이다.

나는 내가 할 노력하고있어 것은 거의 두 바인딩 하나는 종속성 속성 다른 것 CLR은에 재산에서 인, 반대 방향으로 어디에 두 갈래의 바인딩과 같은 것 같다.

어떤 도움을 주셔서 감사합니다 !!

답변

0

저는 Expanders에서 트리거를 사용하여 그리드의 가시성을 설정하고 그리드를 바인딩 할 수 있다고 생각합니다. ViewModel에 대한 가능성. 이 방법은 코드 숨김 대신 코드 대신 트리거를 사용하는 솔루션과 유사합니다.

제 의견으로는 코드가있는 솔루션도 충분합니다. 누가 모든 것을 XAML에 코드 숨김이 아니어야한다고 말했습니다. 코드 숨김은 일반적으로 비즈니스 논리 등에 좋지 않지만 XAML로만 표현할 수없는 경우 코드 숨김으로 시각적 논리를 사용하는 것이 좋습니다.

+0

_Expander_가 포함 된 _DataTrigger_에서 ** Grid.Visibility **를 설정하면 _Expander_가 _Grid_ 하위를 인식해야하므로 적합하지 않습니다. ** FindAncestor ** 바인딩을 사용하는 지점은 부모가 자식에 대해 알 필요없이 요소가 부모 요소에 반응하도록하려는 위치입니다. _Expander_ _ContentPresenter_있는 _UserControl_ 일부인 _Grid_ 있지 않을 수 있습니다. 앞서 언급했듯이 XAML에 이미 설정된 _Expander_에 대한 바인딩이 바뀌었기 때문에 프로그램 방식으로 문제가 해결되지 않았습니다. 그것을 집계하지 않습니다. – Neo