2011-03-28 3 views
2

여러 BezierSegments로 구성된 경로를 동적으로 만들고 싶습니다.데이터 바인딩을 사용하여 Silverlight에서 경로를 만들 수 있습니까?

데이터 원본을 숫자 만 입력하면되므로 데이터를 바인딩하고 싶습니다. 즉 앱에서 코드에 지오메트리 개체를 만들면 안됩니다.

이것이 가능합니까?

업데이트 :

여기 패스 세그먼트 (segment)의 고정 된 수에 대한 예입니다 : 나는 세그먼트의 변수 번호를 가지고 싶습니다

<Path Stroke="Black"> 
    <Path.Data> 
     <PathGeometry> 
      <PathFigure StartPoint ="{Binding CalculatedPointA, Mode=OneWay}"> 
       <LineSegment Point="{Binding CalculatedPointB, Mode=OneWay}" /> 
       <LineSegment Point="{Binding CalculatedPointC, Mode=OneWay}" /> 
       <LineSegment Point="{Binding CalculatedPointA, Mode=OneWay}" /> 
      </PathFigure> 
     </PathGeometry> 
    </Path.Data> 
</Path> 

.

답변

0

실제 질문에 대한 답은 다음과 같습니다. 코드를 사용하지 않고 (또는 제 3자가 코드를 작성한 추가 구성 요소를 사용하여) 경로 숫자 또는 세그먼트를 동적으로 작성하기 위해 데이터를 바인딩 할 수 없습니다.

이 질문은 필요하지 않다면 코드를 쓰지 않겠다고 생각하거나 그렇지 않아야한다고 믿을만한 이유가 있습니까?

+0

순수 MVVM 설정에서 작업하므로 코드를 피하고 ViewModels에서 FrameworkElements를 동적으로 만들려고합니다. –

+0

@elggarc : 많이 들었습니다. MVVM은 마술을 수행 할 수 없으며 누군가 코드를 작성해야합니다. MVVM이 코드 작성을 배제한다는 것이 귀하의 신념입니까? 그렇다면 무엇을 기반으로합니까? 나는 MVVM의 신조를지지하는 많은 사람들이 그 목표를 제대로 이해하지 못하고 있음을 발견했다. 이 경우 MVVM 기반인지 여부에 관계없이 앱의 순전히 시각적 구성 요소를 전달하기위한 코드를 작성하면 안됩니다. 왜냐하면 뭔가 필요한 일을 무법화하는 방법론에 집착해야 할 이유가 있기 때문입니다. – AnthonyWJones

+0

뷰의 코드를 단위 테스트 할 수 없으므로 가능하면 뷰 모델에 코드를 유지하고 뷰 순수 XAML을 kep하려고 시도합니다. 분명히 이것이 항상 가능한 것은 아니며 우리는 불가피한 견해에서 특정한 코드를 보았습니다. –

0

XAML의 Path 요소에있는 Data 특성을보기 모델의 String 형식의 DependencyProperty에 바인딩하십시오. 코드를 사용하여 Path 문에 대한 문자열 표현을 작성하십시오 : "F0 M 10,10 L100,10 A 1,1,1,1,110,10 L 200,10".

당신은 모든 설정해야합니다 ..

<Path x:Name="PrimaryPath" 
      StrokeThickness="{Binding LineThickness, Source={StaticResource LineVM}, Mode=OneWay}" 
      Stroke="{Binding LineColor, Source={StaticResource LineVM}, Mode=OneWay}" 
      Data="{Binding PathData, Source={StaticResource LineVM}, Mode=OneWay, Converter={StaticResource myConv}}"> 
    </Path> 

http://stringtopathgeometry.codeplex.com/에서 StringToPathGeomertry 컨버터를 다운로드 :

여기
Public Shared ReadOnly PathDataProperty As DependencyProperty = DependencyProperty.Register("PathData", GetType(System.String), GetType(LineViewModel), Nothing) 
    Public Property PathData As String 
     Get 
      Return Me.GetValue(PathDataProperty) 
     End Get 
     Set(ByVal value As String) 
      Me.SetValue(PathDataProperty, value) 
      RaisePropertyChanged(MethodBase.GetCurrentMethod().Name.Substring(4)) 
     End Set 
    End Property 

은 XAML입니다 : 여기

는 속성입니다!

관련 문제