2011-03-28 54 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转换器..

你应该准备就绪!

相关问题