gpt4 book ai didi

wpf - 如何使用 MVVM 调用用户控制方法?

转载 作者:行者123 更新时间:2023-12-04 19:11:45 25 4
gpt4 key购买 nike

我在一个 WPF 项目中工作,我在我的项目中使用 MVVM 模式。

我创建了一个用户控件(也在 WPF 中),我想在我的项目中使用它,现在,我的问题是我的用户控件中有一个方法,我需要从我的 View 模型中调用,但我不知道如何做到这一点,如何从 View 模型绑定(bind)到我的控件内的方法。

如果我使用后面的代码,显然没有问题,因为我直接引用了我的控件,所以我可以做“mycontrol.MyMethod();”m,但是当然,这样做会违背逻辑MVVM 模式。

我尝试在我的用户控件中使用依赖属性,并在我的项目的 xaml 中使用该依赖属性绑定(bind)到它,但它没有工作,编译器说该属性未找到或不可序列化。

因此,如果有人可以分享一些关于我如何实现这一点的信息,我将不胜感激。

已编辑

据我了解,你有 View ,它是所有的 GUI,然后你有模型,它是所有的逻辑,它们你有 View 模型,它就像一个中间层,用于将 View 与模型绑定(bind), 对?

通过这种方式我开发了我的项目,但是我遇到了一个问题,我需要一个自定义控件,一个可以记住用户输入内容的 TextBox,当他开始输入时,如果有以该字母开头的单词,这些单词是显示为建议,正如 Google 所做的那样。

此 TextBox 用作搜索过滤器;所以我创建了一个用户控件来执行此操作,我向我的用户控件添加了一个方法,以允许使用我的控件的任何应用程序将项目添加到包含用户输入的所有字符串的内部数组中。

我创建了一个用户控件,因为我找不到任何按我想要的方式运行的控件。

所以我的问题是当我将用户控件添加到主项目时,因为我需要能够调用将项目添加到内部数组的方法,但也许我做错了,所以如果有你有一个更好的主意,如果你与我分享,我将不胜感激。

最佳答案

你不应该从 ViewModel 调用 View 方法,反之亦然。

在您的 ViewModel 上创建一个属性(ObservableCollection?),它将具有 CollectionChanged 事件,订阅它以监视更改(如果需要)。

当您将项目添加到 ViewModel 中的集合时,GUI 将相应更新(您必须在 GUI 线程上执行 Add() 操作,顺便说一句)。

如果您需要更改列表中的当前位置,可以使用相应的集合(CollectionViewSource 等)。

如果您确实需要将字符串传递给您的控件,请创建一个 DependencyProperty 并将其 OneWay 绑定(bind)到您的 ViewModel 的属性。当您设置该值时,它将在您的 DependencyProperty 上调用 PropertyChangedCallback。

关于wpf - 如何使用 MVVM 调用用户控制方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2238016/

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