我有一段时间试图让我的数据绑定正常工作。我有理由相信我想要完成的事情不能完成,但我们会看到我得到的答案。Silverlight中的DataContext,DataBinding和元素绑定
我有一个UserControl。这个用户控件只包含一个按钮。现在在后面的代码中,我有一个属性名称IsBookmarked。当设置了IsBookmarked时,会运行代码来激活按钮的外观。这个想法是,你点击按钮,它在视觉上改变。我们将调用这个UserControl一个书签控件。
现在我有另一个控件,我们将调用FormControl。我的FormControl包含一个子控件Bookmark。我试图在我的书签控件上进行数据绑定,但它不起作用。这里有一些代码可以帮助你。
这是XAML和我的控制Loaded事件处理。正如你可以看到它包含一个自定义控件(书签)的子元素。所以一旦这个控件加载,它的DataContext被设置为一个Employee对象的新实例。 Silverlight还将我的子书签控件的DataContext属性设置为同一个实例。我通过调试验证了这一点。如果我的父母有一个有效的DataContext集,那么为什么我的孩子不能控制(书签)属性数据绑定到它?
<UserControl ......>
<q:Bookmark x:Name="BookMarkControl1" IsBookmarked="{Binding IsSiteBookmarked}" />
</UserControl>
public void Control_Loaded(object sender, EventArgs e)
{
DataContext = new Employee { IsSiteBookmarked = True };
}
这是我下面的自定义控件。显然它包含的不仅仅是这些,但为了可读性,我已经将它修剪到了我想要绑定到的属性上。
//this is the bookmark control. I've included this control within another control, and I'm trying to databind to properties within my parents DataContext
public partial class Bookmark : UserControl
{
bool _IsBookmarked= false;
public bool IsBookmarked
{
get {return _IsBookmarked;}
set {
_IsBookmarked= value;
SwitchMode(value);
}
}
}
UPDATE
明白了,我应该提一些JavaScript错误。 Firebug报告了一个AG_E_PARSER_BAD_PROPERTY_VALUE异常。这似乎并不像我的数据绑定甚至还在工作。
'IsBookmarked'是作为依赖项属性实现的吗?另外你的代码有点混乱,你向我们展示一个叫做Bookmark的分类,它有一个IsSiteBoolmarked属性,但你的Xaml分配给一个IsBookmarked属性。 IsSiteBookmarked属性实际上似乎是一个名为Employee的类的属性。我认为你需要整理这个问题并添加更多的细节。 – AnthonyWJones 2010-03-23 12:17:37
添加了更多信息。希望能帮助到你。 – Matt 2010-03-23 16:01:24