使用usercontrol对象进行双向数据绑定

时间:2015-04-28 17:10:42

标签: c# wpf xaml data-binding 2-way-object-databinding

我对数据绑定有点新意。我设法做了databind的单向操作,但我在做双向操作时遇到了一些麻烦。

我为1)做了一个带有一些文本块的用户控件, 2)一个包含一些字符串属性的类, 3)一个ObservableCollection,它使用此类生成具有这些属性的对象,4)由ObservableCollection生成的listview,并且usercontrol为项目的datatemplate。

使用usercontrol的TextBlock绑定类的属性我在XAML中编写了以下代码:

<TextBlock x:Name="MyTextBlock" Text="{Binding TextBlock_Property}" />

其中MyTextBlock是usercontrol中的文本块,TextBlock_Property是我创建的类中的一个属性。 我也试过Text="{Binding TextBlock_Property, Mode=TwoWay}",但我没有看到任何区别。

注意:当我更改已创建对象的属性时,文本块也会更改,但是当我更改Textblock内容时,该属性不会更新。

更新:我上课的是

class MyClass
{
    public string Title { get; set; }
    public string TextBlock_Property { get; set; }

    public MyClass(string title, string textBlock_Property)
    {
        Title = title;
        TextBlock_Property = textBlock_Property;
    }
}

1 个答案:

答案 0 :(得分:1)

MyClass必须实现INotifyPropertyChanged,属性TextBlock_Property已发出OnPropertyChanged("TextBlock_Property")事件信号,表示要更新的绑定。

    private string _TextBlock_Property;

    public string TextBlock_Property
    {
        get { return _TextBlock_Property; }
        set { _TextBlock_Property = value; OnPropertyChanged("TextBlock_Property"); }
    }

要通知Xaml / bound控件数据已更改,必须在包含属性的类上实现INotifyPropertyChange,并且其实例位于DataContext中。下面是我用来实现接口INotifyPropertyChanged的代码。

public class MyClass : INotifyPropertyChanged
{
        /// <summary>
        /// Event raised when a property changes.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// Raises the PropertyChanged event.
        /// </summary>
        /// <param name="propertyName">The name of the property that has changed.</param>
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
}

要完整查看此操作,请查看我的博客文章Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding.