Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在视图中需要而不是在更改时更新DP_C#_Wpf_Mvvm - Fatal编程技术网

C# 在视图中需要而不是在更改时更新DP

C# 在视图中需要而不是在更改时更新DP,c#,wpf,mvvm,C#,Wpf,Mvvm,例如,假设我有一个组合框,其itemsSource绑定到一个依赖属性。绑定列表值可以根据许多因素进行更改。计算这些值需要相当长的时间,因此除非必要,否则我不希望应用程序更新集合。在MVVM中,只有当视图中需要数据时(即组合框下拉时),才“延迟”更新绑定属性的正确方法是什么?我将向视图模型添加一个方法: class ViewModel { public void Refresh() { // ... } // ... } 。。。必要时在你的控制下打电话

例如,假设我有一个组合框,其itemsSource绑定到一个依赖属性。绑定列表值可以根据许多因素进行更改。计算这些值需要相当长的时间,因此除非必要,否则我不希望应用程序更新集合。在MVVM中,只有当视图中需要数据时(即组合框下拉时),才“延迟”更新绑定属性的正确方法是什么?

我将向
视图模型添加一个方法:

class ViewModel {
    public void Refresh() {
        // ...
    }

    // ...
}
。。。必要时在你的控制下打电话

class Control : UserControl {
    private ViewModel ViewModel = new ViewModel();

    void OnDropDown() {
        ViewModel.Refresh();
    }

    // ...
}

您的ViewModel应该知道屏幕上的所有绑定数据,因此您的ViewModel将以某种方式获取下拉列表中的数据


触发抓取的通常是ViewModel中的一个“命令”,它通常来自按钮单击或任何其他视图事件。

谢谢,这是有道理的,也是我所倾向的。也就是说,OnDropDown msdn引用没有说明事件的触发时间。你知道是在下拉列表下降之前还是之后吗?没有previewDropDown事件。@ach--不确定,但您可以尝试捕获MouseDown事件。