我对数据绑定有点新意。我设法做了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;
}
}
答案 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.