Silverlight:奇怪的数据绑定问题

时间:2010-04-20 19:33:59

标签: c# silverlight data-binding windows-phone-7

我正在使用Visifire图表在Windows Phone 7应用程序上显示数据。 我创建了一个适当绑定到依赖项属性的图表。它运作得很好。我决定将图表变成用户控件,因为我将在另一个项目中使用它,并使用相同的设置。现在我的数据绑定不起作用,除非我在后面的代码中而不是在XAML中绑定它。

这就是我所拥有的:

<UserControl ... x:Name="root">
 ...
     <chart:DataSeries ... DataSource="{Binding ElementName=root, Path=Results}">
 ...
</UserControl>

和背后的代码:

public MyList Results
{
    get { return (MyList)GetValue(ResultsProperty); }
    set { SetValue(ResultsProperty, value); }
}

    // Using a DependencyProperty as the backing store for Results.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ResultsProperty =
        DependencyProperty.Register("Results", typeof(MyList), typeof(MyChart), new PropertyMetadata(null));


public GoogleChart()
{
    Loaded += delegate
    {
    //  theChart.Series[0].DataSource = Results;
    };
    Results = new GoogleResults();
    InitializeComponent();
}

如果我取消注释行theChart.Series[0].DataSource = Results;,它就能完美运行。但是,如果我将该行留下评论(就像我之前将图表移动到UserControl一样),它就不会绑定。 (顺便说一下:theChart是图表父级的x:name。所以第一个元素.Series[0]引用图表。

有谁知道为什么会这样?同样,在我将代码移动到UserControl之前,它工作得很好。

由于

1 个答案:

答案 0 :(得分:2)

如果我正确理解您,您已创建此UserControl,以便您可以将其实例放入应用中的各个页面。

在这种情况下,您可能会给这些实例命名。该名称将替换最初在UserControl的Xaml中分配的名称“Root”。因此ElementName=Root的绑定将失败。

通常,有一个名为“LayoutRoot”的根元素(通常为Grid)。因此,而不是依赖于可以更改使用“LayoutRoot”的UserControl名称,按照惯例,它是UserControl的Content元素。像这样: -

<chart:DataSeries ... DataSource="{Binding ElementName=LayoutRoot, Path=Parent.Results}">

注意,属性路径现在以Parent开头,它会将您带到UserControl,而不需要知道UserControl的名称。