c# – 对于在ViewModel中放置逻辑代码的位置感到困惑
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 对于在ViewModel中放置逻辑代码的位置感到困惑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2039字,纯文字阅读大概需要3分钟。
内容图文
![c# – 对于在ViewModel中放置逻辑代码的位置感到困惑](/upload/InfoBanner/zyjiaocheng/818/18c3cc9138bf4bdfbb6a3e6669338126.jpg)
我是C#/ WPF的新手,我想澄清一下我是否正确实现了我的ViewModel.
我创建了一个简单的窗口,其中包含搜索文本框和结果列表框.
<TextBox Text="{Binding SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<ListBox ItemsSource="{Binding Results}" />
然后我有一个带有以下代码的ViewModel.
private List<string> lstStr;
public ViewModel()
{
lstStr = new List<string>();
lstStr.Add("Mike");
lstStr.Add("Jerry");
lstStr.Add("James");
lstStr.Add("Mikaela");
}
public List<string> LstStr
{
get
{
return lstStr;
}
set
{
if (lstStr != value)
{
lstStr = value;
OnPropertyChanged("LstStr");
}
}
}
private string searchText;
public string SearchText
{
get
{
return searchText;
}
set
{
if (searchText != value)
{
searchText = value;
OnPropertyChanged("SearchText");
UpdateResults();
}
}
}
private ObservableCollection<string> results = new ObservableCollection<string>();
public ObservableCollection<string> Results
{
get
{
return results;
}
set
{
if (results != value)
{
results = value;
OnPropertyChanged("Results");
}
}
}
public void UpdateResults()
{
int i = 0;
results.Clear();
while (i < LstStr.Count)
{
if (LstStr.ElementAt(i).ToString() != null)
{
if (searchText != null && searchText != "")
{
if (LstStr.ElementAt(i).Trim().Contains(searchText))
{
results.Add(LstStr.ElementAt(i));
Console.WriteLine(LstStr.ElementAt(i));
}
}
else
results.Clear();
}
else
Console.WriteLine("NULL");
i++;
}
}
我发现自己在ViewModel的代码的Get或Set部分编写逻辑.假设我将有更多要实现的文本框和列表.这是在属性中编码逻辑的正确方法还是我完全忽略了这一点?请帮我理解这个.提前致谢.
解决方法:
不,这不完全正确.
首先,逻辑通常在模型中,而不是视图模型.也就是说,你有一个过滤器,基本上是UI逻辑,所以它可能在这里.
其次,过滤器只会在您设置搜索文本时更改,因此逻辑将放入setter,而不是getter.我也不会内联整个事情,把它放在自己的函数中,以便以后可以重用它:
public String SearchText
{
...
set
{
serachText = value;
NotifyPropertyChanged();
UpdateResults();
}
}
public void UpdateResults()
{
...
}
要记住的一件事(并没有真正的好方法)是,如果该功能需要很长时间才能运行,那么在用户输入时,您的UI确实会变慢.如果执行时间很长,请尝试缩短它,然后考虑在单独的线程上执行.
内容总结
以上是互联网集市为您收集整理的c# – 对于在ViewModel中放置逻辑代码的位置感到困惑全部内容,希望文章能够帮你解决c# – 对于在ViewModel中放置逻辑代码的位置感到困惑所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。