gpt4 book ai didi

silverlight - Silverlight 中的 DataContext、DataBinding 和元素绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 06:56:24 24 4
gpt4 key购买 nike

我有一段 hell 般的时间试图让我的数据绑定(bind)正常工作。我有理由相信我正在努力完成的事情无法完成,但我们会看到我得到什么答案。

我有一个用户控件。此 UserControl 仅包含一个按钮。现在在后面的代码中,我有一个属性名称 IsBookmarked。当设置 IsBookmarked 时,将运行代码以动画按钮的外观。这个想法是您单击按钮,它会在视觉上发生变化。我们将把这个 UserControl 称为 Bookmark 控件。

现在我有了另一个控件,我们将其称为 FormControl。我的 FormControl 包含一个子 Bookmark 控件。我试图在我的书签控件上进行数据绑定(bind),但它不起作用。这里有一些代码可以帮助你。

这是我的控件的 XAML 和 Loaded 事件处理程序。如您所见,它包含一个作为自定义控件(书签)的子元素。因此,一旦加载此控件,它的 DataContext 就会设置为 Employee 对象的新实例。 Silverlight 还将我的子书签控件的 DataContext 属性设置为相同的实例。我已经通过调试验证了这一点。如果我的父级设置了有效的 DataContext,那么为什么我的子级控件(书签)属性数据不能绑定(bind)到它?

<UserControl ......>
<q:Bookmark x:Name="BookMarkControl1" IsBookmarked="{Binding IsSiteBookmarked}" />
</UserControl>

public void Control_Loaded(object sender, EventArgs e)
{
DataContext = new Employee { IsSiteBookmarked = True };

}

这是我下面的自定义控件。显然它包含的内容不止这些,但为了便于阅读,我已将其缩减为我试图数据绑定(bind)到的属性。
//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);
}
}

}

更新

有一些我应该提到的 javascript 错误。 Firebug 报告 AG_E_PARSER_BAD_PROPERTY_VALUE 异常。我的数据绑定(bind)似乎还没有工作。

最佳答案

使 Bookmark 控件上的 IsBookmarked 属性成为依赖属性。

我认为 Control_Loaded 是您的 FormControl 的一部分,在这种情况下,我不确定您是否正确使用了 DataContext。最好仔细检查一下。

更新:是的,您正在正确使用 DataContext。 AG_E_PARSER_BAD_PROPERTY_VALUE 表示您需要将 IsBookmarked 属性设置为依赖属性,如下所示:

 Public Property IsBookmarked() As Boolean
Get
Return Me.GetValue(IsBookmarkedProperty)
End Get
Set(ByVal value As Boolean)
Me.SetValue(IsBookmarkedProperty, value)
End Set
End Property

Public Shared ReadOnly IsBookmarkedProperty As DependencyProperty = DependencyProperty.Register("IsBookmarked", GetType(Boolean), GetType(Bookmark), New PropertyMetadata(New PropertyChangedCallback(AddressOf OnIsBookmarkedPropertyChanged)))

Private Shared Sub OnIsBookmarkedPropertyChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim cntrl As Bookmark = TryCast(d, Bookmark)
cntrl.SetIsBookmarked(e.NewValue)
End Sub

如果您只需要存储该值以供以后使用,那么您不需要在 OnIsBookmarkedPropertyChanged 过程中做任何事情,但我还是放了一些代码作为示例。

祝你好运!

关于silverlight - Silverlight 中的 DataContext、DataBinding 和元素绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com