没有什么优先级啊?!流程走到哪里,哪里就起作用了。比如说你执行了 textbox1.Text 赋值,然后(当主线程渲染之后)就显示这个值,因为此时 slider1.Value 根本没有触发修改事件嘛;可是当 slider1.Value 触发了修改事件,此时你并没有执行 Button_Click 嘛,当然就是绑定的结果。这就是因为你有两套机制,它们按照流程而交叉地修改显示。实际上,如果你遵循 MVVM 编程模式,那么你就应该仅仅使用一个 ViewModel 对象为 UI 控件绑定值。坚决杜绝想去另外写个赋值代码的诱惑。实际上你不需要再使用 MVP 模式,不需要写事件处理代码。而需要使用 MVVM 模式,使用 ViewModel 自动化绑定。

解决方案 »

  1.   

    遵循 MVVM 模式,可以“净化”你的编程思路。你可以定义一个 ViewModel,先把当前的窗口的“纯数据的”业务逻辑抽象出来,然后实例化你的这个窗口的 DataContext,例如    <Window.DataContext>
            <local:MyMainWindowModel x:Name="ModelContext" />
        </Window.DataContext>然后你的 UI 控件都与这个 ModelContext 绑定,UI操作所触发的行为也是调用 ModelContext 中的方法。而不是控件之间绑定,更不是去在 window 对象实例中写代码。事实上,这个xaml以及Style中的代码应该由“美工+设计师”编辑,不由程序员来编辑。程序员应该只是做一些低级的类似Converter、ViewModel、Behavior之类的编码工作。