내 WPF 애플리케이션에서 나는 캔버스를 사용하여 드로잉을합니다. 이전에 코드에서 드로잉을 처리했지만 지금은 ViewModel에 모든 요소를 추가했습니다. 이것은 나에게 몇 가지 도전을 준다.WPF 캔버스를 ObservableCollection에 바인딩
나는 스트로크를 가지고있는 몇 개의 InkPresenter 객체를 가지고있다.
// Build an InkPresenter:
var someInkPresenter = BuildInkPresenter(..);
//_myCanvas is the <Canvas> I want to display it in:
_myCanvas.Children.Add(someInkPresenter);
을 지금 - 나는 다르게이 작업을 수행 할 필요가 _myCanvas을 보유하고있는 XAML의 코드 숨김에서 InkPresenter를 구축하지 :이 같은 - Earier 난 뒤에 코드에서 캔버스에 자녀로 추가. 내가 뭘하려는 것은 InkPresenter을 만들고 컬렉션에 추가하는 것입니다
public ObservableCollection<InkPresenter> Drawings;
내 문제는 지금이 ObservableCollection에 캔버스를 바인딩하는 방법을 - 그리고 컬렉션에 추가 할 때 InkPresenters 표시합니다. 어떻게 든 데이터 바인딩을 사용하여 이것을 달성 할 수 있습니까?
Thx! 합리적으로 들린다. 그것을 봐 줄 것입니다! – stiank81
이것은 일반적으로 사용자가 취하는 접근 방식이지만, InkPresenters가 코드에 추가 할 때처럼 캔버스의 직접 자식이 될 수 없으므로이 경우에는 문제가 발생할 가능성이 높습니다. 대신 Visual Tree에는 각 InkPresenter 항목 주위에 추가 ContentPresenter가 삽입됩니다. 이 메서드를 작동 시키려면 각 InkPresenter에서 실제 데이터 (Strokes)를 꺼내어 해당 컬렉션을 VM에 저장해야합니다. 그런 다음 GetContainerForItemOverride를 재정 의하여 InkPresenter를 반환하는 사용자 지정 ItemsControl을 만들 수 있습니다. –
Cant가 John과 동의합니다 ... ItemsControl입니다. 그것은 기본 컨테이너로 UIElement를 사용합니다 ... – Anvaka