【问题标题】:How do I make a C# user control property data bindable?如何使 C# 用户控件属性数据可绑定?
【发布时间】:2014-01-27 11:43:27
【问题描述】:

我有一个 MVVM Windows Phone 8 应用程序。 XAML 页面有一个我创建的用户控件,当View Model 中发生更改时需要通知该控件。为了方便这一点,我在 user control 中创建了一个 int 属性来绑定到 View Model 中的一个属性,所以 用户控件属性的setter方法会在View Model中绑定的属性发生变化时触发。

使用下面的代码,用户控件的 VideosShownCount 属性确实会在设计时显示在 Property List 中,但是当我点击绑定小按钮,创建数据绑定选项在弹出菜单中灰显

所以我有一两个问题,取决于根本问题是什么:

1) 如何使 视图模型 中的属性可用作数据绑定源?

2) 如何格式化 用户控件 属性,以便 IDE 允许将其数据绑定到 View Model 属性?

    private int _videosShownCount = 0;

    public int VideosShownCount 
    { 
        get
        {
            return this._videosShownCount;
        }
        set
        {
            this._videosShownCount = value;
        }
    }

    public static readonly DependencyProperty VideoShownCountProperty =
        DependencyProperty.Register("VideosShownCount", typeof(int), typeof(MyUserControl), 
        new PropertyMetadata(0, new PropertyChangedCallback(VideoShownCountPropertyChanged))); 

    static void VideoShownCountPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        MyUserControl MyUserUserControl = (MyUserControl)sender;

        // Don't care about the value, just want the notification.
        // int val = (int)e.NewValue;

        // Do work now that we've been notified of a change.
        MyUserUserControl.DoWork();
    }

【问题讨论】:

  • 在创建依赖属性时最好输入'propdp'然后点击tab
  • @ShawnKendrot - 好提示。关于我为什么遇到数据绑定问题的任何想法?
  • 不知道,我创建了一个新的 UserControl,添加了一个新的 dp MyProperty(只使用了除 ownerType 之外的所有默认值),编译,将控件添加到 PhoneApplicationPage 中的网格中,创建数据绑定是已启用。
  • @ShawnKendrot 您是否在用户控件中明确设置数据上下文?
  • 不在我使用的示例应用程序中。它是在 InitializeComponent 之后在 ctor 中设置的

标签: c# .net data-binding mvvm dependency-properties


【解决方案1】:

您的属性没有使用DependencyProperty,这肯定会导致您的代码和绑定之间出现问题

public int VideosShownCount
{
    get { return (int) GetValue(VideosShownCountProperty); }
    set { SetValue(VideosShownCountProperty, value); }
}

我不确定这是否是您问题的主要原因,但无论如何都值得修复。

【讨论】:

  • 谢谢。进行了更改,但仍然没有运气。
  • 如果你想让它在设计器中可见,你还必须用 BrowsableEditorBrowsable 属性标记你的属性
  • @Daedalus 该属性显示设计器,可供编辑。但正如我所说,当我弹出绑定菜单时,创建数据绑定选项被禁用。无论如何,我尝试添加这两个属性,但没有帮助:[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
猜你喜欢
  • 2013-08-29
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多