首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在属性更改时

在属性更改时
EN

Stack Overflow用户
提问于 2019-10-08 16:04:12
回答 2查看 79关注 0票数 0

在前端更改值为1-5的组合框时,onpropertychange事件将激发一个方法,该方法实例化反映组合框值的viewmodel集合。当选择发生变化时,组合框还会处理后台代码中的一些UI行为,这些行为处理一些控件的显示和隐藏。当通过模型从数据库加载下拉列表的值时,onproperty change事件会触发,但它没有处理程序,因此被忽略。然而,代码隐藏部分确实会触发,并且正确的控件会显示在屏幕上。当控件值是由数据而不是用户更改时,我如何确保触发this事件?

代码语言:javascript
运行
复制
private void MethodInformationViewModel_PropertyChanged(object sender, 
System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "NumberOfTests")
        {

            ManageRunDialogues();
        }
    }

XAML

代码语言:javascript
运行
复制
<ComboBox x:Name="CB_NumberOfTests" Grid.Column="16" Grid.Row="4" 
Grid.ColumnSpan="2" SelectionChanged="CB_NumberOfTests_SelectionChanged" 
SelectedValue="{Binding 
vmcTPMViewModel.MethodInformationViewModel.NumberOfTests, Mode=TwoWay}">
                        <sys:Int32>1</sys:Int32>
                        <sys:Int32>2</sys:Int32>
                        <sys:Int32>3</sys:Int32>
                        <sys:Int32>4</sys:Int32>
                        <sys:Int32>5</sys:Int32>
                    </ComboBox>

我期待任何属性NumberOfTests的更改都会触发onpropertychenge事件。这是正确的,但是当数据库调用填充模型构造函数中的模型时,当属性发生变化时,没有处理程序,并且不会触发change事件,因此不会发生方法调用ManageRunDialogues()。我能做些什么?

EN

回答 2

Stack Overflow用户

发布于 2019-12-11 23:42:20

很抱歉发得太晚了。因此,答案是确保模型类实例化发生在MethodInformationViewModel_PropertyChanged事件连接发生之后。我把它们弄错了,所以属性在MethodInformationViewModel连接之前就已经改变了,因此导致了这种行为。切换它们意味着侦听器在从DB加载模型时工作。

为了解决上面的问题,测试的数量在同一个类中,并且在后面的代码中唯一要处理的是UI。

我喜欢你在一个问题上被投票否决的事实,真的鼓励男人们!+1讽刺?!?再次感谢你的仔细检查。

票数 1
EN

Stack Overflow用户

发布于 2019-10-08 17:09:46

如果您正在使用MVVM模式,请不要对任何ViewModel更改使用SelectionChanged事件。仅在需要时将其保留用于GUI更改。(即背景颜色、高度、宽度...)

更改选择时的所有设置器级别更改都可以转到NumberOfTests属性的ViewModel方法。

代码语言:javascript
运行
复制
private int _numberOfTests ;
public int NumberOfTests 
{
    get { return _numberOfTests; }
    set
    {
        _numberOfTests = value;
        pqr();   // Your extra operations that run when any one changes NumberOfTests
        OnPropertyChanged();
    }
}

如果您需要在更改视图模型属性之前执行额外的操作(仅限于后端),我建议您使用额外的setter函数。

代码语言:javascript
运行
复制
public void UpdateNumberOfTests(int value)
{
    NumberOfTests = value;
    abc(); // Your extra operations that run only when back-end changes NumberOfTests.
}

然后让后端使用该函数。因此,仅当后端使用UpdateNumberOfTests(int值)更改NumberOfTests时,才会执行额外的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58282377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档