gpt4 book ai didi

WPF MVVM : Add item not present in combobox

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

我正在使用带有 WPF 的 MVVM 方法让用户在组合框中选择一个项目。该模型包含一组可能的选项,组合框绑定(bind)到此集,当前选择再次绑定(bind)到我的模型的属性。这部分工作正常。

现在我想允许用户在组合框中输入任意文本。如果文本与现有项目不对应,程序应询问他是否要添加新项目。还应该允许他取消操作并选择另一个项目。

我将如何在 MVVM 模式中做到这一点?

最佳答案

您将从 ViewModel 的绑定(bind)属性 setter 中检查文本的“已经存在”状态。此时,您需要一种机制来引发事件并根据发生的情况决定要做什么。

一个例子:

enum Outcome { Add, Cancel }

class BlahEventArgs : EventArgs
{
Outcome Outcome { get; set; }
}

class ViewModel
{
private string name;

public EventHandler<BlahEventArgs> NotExistingNameSet;

public Name
{
get { return this.name; }

set
{
if (/* value is existing */) {
this.name = value;
return;
}

var handler = this.NotExistingNameSet;
if (handler == null) {
// you can't just return here, because the UI
// will desync from the data model.
throw new ArgumentOutOfRangeException("value");
}

var e = new BlahEventArgs { Outcome = Outcome.Add };
handler(this, e);
switch (e.Outcome) {
case Outcome.Add:
// Add the new data
this.name = value;
break;
case Outcome.Cancel:
throw new Exception("Cancelled property set");
}
}
}
}

您的 View 将添加一个事件处理程序到 NotExistingNameSet呈现适当的 UI 并设置 e.Outcome 的值因此。

关于WPF MVVM : Add item not present in combobox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368212/

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