2010-03-31 4 views
1

WPF에서 시간 추적 응용 프로그램을 만들려고합니다. 사용자는 timespan (timespan = bar)을 나타내는 요소를 Canvas에 그려야합니다. 이제는 기존 바가 컬렉션에 데이터 바인딩 될 때 추가됩니다 (각 컬렉션 항목에는 캔버스의 막대의 너비와 왼쪽 위치가 포함됨).WPF에서 런타임에 데이터 바인딩 된 UserControls를 동적으로 만들거나

'bar'Usercontrol에는 캔버스의 막대 그리기 및 위치 지정을 담당하는 "ProjectProperty"라는 종속성 속성이 있습니다.

하지만 사용자가 Canvas에 새 막대를 그릴 때 어떤 일이 발생해야합니까? 그것은 어떻게 든 데이터 바인딩되어야하지만, 어떤 시점에서 이것이 필요하며, 어떻게해야합니까?

캔버스에있는 '막대'UserControls는 데이터 소스에 이미 존재하기 때문에 데이터 바인딩 된 것으로 알고 있습니다.

사용자가 mousedown에서 막대 그리기를 시작하고 mouseup이 끝나면 프로그래밍 방식으로 왼쪽 위치와 너비를 바운드 데이터 소스에 추가해야합니까? 그렇지 않다면 어떻게 데이터 소스를 업데이트 할 것입니까?

감사합니다.

+0

XAML과 데이터 구조를 보여줄 수 있습니까? 데이터 소스에 왼쪽 위치와 너비를 "추가"하는 것이 무슨 뜻인지 잘 모르겠습니다. 아니면 "세트"를 의미 했습니까? 바인딩이 XAML에 정의되어 있으면 새 모음 컨트롤을 소스 모음에 간단히 추가하면됩니다. –

답변

0

뷰를 ViewModel, Model 또는 Collection에 바인딩 할 때 일반적으로 취하는 일반적인 접근법은 Model/Collection의 모든 변경 사항을 드라이브하는 것입니다. 따라서 뷰는 완전히 청취하고 바인딩 대상을 반영합니다. 따라서 마우스 이벤트를 추적하여 막대의 위치와 크기를 캡처하고 (사용자가 그리는 동안 미리보기 그리기) 사용자가 그리기 작업을 완료하면 새 항목을 기본 모음에 추가해야하며 풍선을 뷰로 보자.

일상적으로 수행하는 것에 대한 내 견해로는 새로운 항목이 (데이터 소스에 직접 추가되는) 코드를 통과하는 경로가 하나뿐이므로 코드 경로가 줄어들고 버그/유지 관리 문제가 발생할 가능성이 줄어 듭니다. .

관련 문제