如何使C#用户控件属性数据可绑定?

时间:2014-01-09 04:15:54

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

我有一个MVVM Windows Phone 8应用程序。 XAML页面包含我创建的用户控件,需要在查看模型中进行更改时收到通知。为此,我在用户控件中创建了一个 int 属性,以绑定到 View Model 中的属性,因此视图模型中绑定的属性发生更改时,将触发用户控件属性的 setter 方法。

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

所以我有一两个问题,具体取决于根本问题:

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();
    }

1 个答案:

答案 0 :(得分:1)

您没有将DependencyProperty用于您的媒体资源,这肯定会导致您的代码和绑定之间出现问题

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

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