0

我对数据绑定有点陌生。我设法进行了单向数据绑定,但是在进行双向数据绑定时遇到了一些麻烦。

我制作1)了一个包含一些文本块的用户控件, 2)一个包含一些字符串属性的类, 3)一个使用此类生成具有这些属性的对象4)的 ObservableCollection,一个由 ObservableCollection 生成的列表视图,并将用户控件作为项目的数据模板。

为了将类的属性与用户控件的 TextBlock 绑定,我在 XAML 中编写了以下代码:

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

用户控件内的文本块在哪里MyTextBlock,并且TextBlock_Property是我创建的类的属性之一。我也试过Text="{Binding TextBlock_Property, Mode=TwoWay}",但我没有看到任何区别。

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

更新:我做的课是

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;
    }
}
4

1 回答 1

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/绑定控件数据已更改,必须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。

于 2015-04-28T18:53:52.583 回答