相当新手的问题,我敢肯定,但我无法找到答案...... 我有一个控件(在本例中是一个组合框),它绑定到ViewModel属性:
<ComboBox
x:Name="methodTypeCmb"
Grid.Row="0" Grid.Column="2"
ItemsSource="{Binding Path=AllNames, Mode=OneTime}"
SelectedItem="{Binding Path=Name, ValidatesOnDataErrors=True, Mode=TwoWay}"
Validation.ErrorTemplate="{x:Null}"
/>
在我的ViewModel中,当此属性更改时,我想要求用户确认更改 如果用户点击“否”,我想取消更改 但是,我必须做错事,因为我的视图在取消更改时不会恢复到之前的值。
ViewModel的属性:
public string Name
{
get { return m_model.Name; }
set
{
if (MessageBox.Show("Are you absolutely sure?","Change ",MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
// change name
}
base.OnPropertyChanged("Name");
}
}
答案 0 :(得分:0)
因为您要在文本更改事件的范围内取消,所以wpf会忽略属性更改事件。您必须从调度员
调用它 Dispatcher.CurrentDispatcher.BeginInvoke((ThreadStart)delegate
{
OnPropertyChanged("Name");
});
您应该保留现有的“OnPropertyChanged(”名称“);”在函数的底部只需将上面的行添加到要取消的块
编辑:以下代码可以正常测试
public string Newtext
{
get
{
return this._newtext;
}
set
{
if (MessageBox.Show("Apply?", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
this._newtext = value;
this.OnPropertyChanged("Newtext"); //Ignored
}
else
{
Dispatcher.CurrentDispatcher.Invoke((ThreadStart)delegate
{
OnPropertyChanged("Newtext");
});
}
}
}