关于以下代码。
public class ViewModel : INotifyPropertyChanged
{
public int Model { get; private set; }
public ViewModel(int _model)
{
Model = _model;
}
PropertyChangedEventHandler m_propertyChangedEventHandler;
public event PropertyChangedEventHandler PropertyChanged
{
add
{
m_propertyChangedEventHandler += value;
Console.WriteLine("Add");
}
remove
{
m_propertyChangedEventHandler -= value;
Console.WriteLine("Remove");
}
}
}
public partial class Window1 : Window
{
public ObservableCollection<ViewModel> ViewModels { get; private set; }
public Window1()
{
ViewModels = new ObservableCollection<ViewModel>() { new ViewModel(1), new ViewModel(2), new ViewModel(3) };
DataContext = this;
InitializeComponent();
}
protected override void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
base.OnPreviewMouseDoubleClick(e);
Content = new Button();
}
}
<Window x:Class="WpfApplication97.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ListBox ItemsSource="{Binding ViewModels}"
DisplayMemberPath="Model"/>
</Window>
双击时,windows 内容将被替换,这应该清除现有的控件绑定(注销 PropertyChanged,并输入删除访问器)。
在 .net 4.0 下运行,它按预期工作,但在 3.5 下运行(在这种情况下,直到您关闭窗口才会调用 Remove)
为什么会这样,我可以在 3.5 中获得相同的行为吗?