gpt4 book ai didi

wpf - 从 ViewModel 中设置的属性中取消用户编辑?

转载 作者:行者123 更新时间:2023-12-03 10:39:18 25 4
gpt4 key购买 nike

我敢肯定,这是一个新手问题,但我无法找到答案...
我有一个绑定(bind)到 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 中,当此属性更改时,我想要求用户确认更改。
如果用户单击“否”,我想取消更改。
但是,我一定是做错了什么,因为当更改被取消时,我的 View 不会恢复到以前的值。

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");
}
}

最佳答案

因为您是在文本更改事件的范围内取消,所以 wpf 会忽略属性更改事件。您必须从调度程序调用它

        Dispatcher.CurrentDispatcher.BeginInvoke((ThreadStart)delegate
{
OnPropertyChanged("Name");
});

您应该保留现有的“OnPropertyChanged("Name");"在函数的底部,只需将上面的行添加到您要取消的 block 中

编辑:以下代码有效,我已经对其进行了测试
        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");
});
}
}
}

关于wpf - 从 ViewModel 中设置的属性中取消用户编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com