2011-03-28 30 views
2

我想動態地創建一個由幾個BezierSegments組成的路徑。是否有可能在Silverlight中僅使用數據綁定創建路徑?

我想綁定數據,這樣我的數據源只需要提供數字。 即應用程序不應在代碼中創建任何幾何對象。

這可能嗎?

更新:

下面是固定數量的路徑段的一個示例:

<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

對於您的實際問題的答案是:不可能將數據綁定到這些位置,以便在不使用代碼的情況下動態創建路徑數字或分段(或者在某些第三方已編寫代碼的情況下使用附加組件)。

這個問題是否由不寫代碼的願望驅動,如果沒有必要,或者有理由相信你不應該?

+0

我在純MVVM設置中工作,所以我嘗試避免代碼隱藏,並在ViewModels中動態創建FrameworkElements。 – 2011-03-28 13:21:14

+0

@elggarc:我聽到很多。 MVVM不能執行魔術,某個地方需要編寫代碼。您認爲MVVM排除了代碼的創建嗎?如果是這樣,你基於什麼?我發現許多MVVM信條的追隨者並沒有正確理解其目標。在這種情況下,沒有什麼好的理由,基於MVVM的原因,爲什麼你不應該編寫一些代碼來交付你的應用程序的這個純粹的可視化組件。這很方便,因爲如果出於某種原因你會被一種不合法的方法所束縛,從而不得不做出必要的事情。 – AnthonyWJones 2011-03-29 08:15:35

+0

視圖中的代碼不能進行單元測試,因此我們儘可能嘗試將代碼保留在視圖模型中,並保留視圖純XAML。顯然這並不總是可能的,我們在視圖中確實有一些視圖特定的代碼,這是不可避免的。 – 2011-03-31 09:48:03

0

將XAML中Path元素的Data屬性綁定到視圖模型中的String類型的DependencyProperty。使用代碼構建Path語句的字符串表示形式:「F0 M 10,10 L100,10 A 1,1,1,1,110,10 L 200,10」。

這裏是屬性:

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:

<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轉換器..

你應該準備就緒!

相關問題