【问题标题】:MVVM WPF to implement Find and FindNext in dataGridMVVM WPF 在 dataGrid 中实现 Find 和 FindNext
【发布时间】:2014-04-21 09:30:09
【问题描述】:

考虑加载 DataGrid 并在单击查找时选择第一个匹配项并

在 FindNext 下一个匹配突出显示

注意:我可以在普通 WPF 中实现,但在 MVVM 中我们不应该将 GRID/Grid 单元格对象传递给 ViewModel,因此无法更改按钮单击时特定区域的样式。

提前致谢

【问题讨论】:

  • 在 VM 中查找结果,将它们表示为绑定到 UI 的模型,然后在 UI 中执行解释模型、定位要更新的 UI 元素并更新它们的 UI 任务。多田。

标签: c# wpf mvvm datagrid telerik


【解决方案1】:

我是如何解决这个问题的:

private List<v_Repairs> searchRepairs = new List<v_Repairs>();
int searchCount = 0;
int searchPosition = 0; 
private string searchText;
        public string SearchText
        {
            get { return searchText; }
            set
            {
                searchText = value;
                RaisedPropertyChanged("SearchText");
            }
        }
 private ICommand searchCommand;
        public ICommand SearchCommand
        {
            get
            {
                if (searchCommand == null)
                {
                    searchCommand = new RelayCommand(new Action<object>(Search));
                }
                return searchCommand;
            }
            set
            {
                searchCommand = value;
                RaisedPropertyChanged("SearchCommand");
            }
        }
        public void Search(object Parameter)
        {
            if (!String.IsNullOrWhiteSpace(SearchText))
            {
                searchPosition = 0;
                searchRepairs = V_Repairs.Where(r => r.Serial_Number.Contains(SearchText)).ToList();
                searchCount = searchRepairs.Count;
                SelectedItem = (v_Repairs)searchRepairs[0];
                searchPosition++;
            }
        }
 private ICommand searchNextCommand;
        public ICommand SearchNextCommand
        {
            get
            {
                if (searchNextCommand == null)
                {
                    searchNextCommand = new RelayCommand(new Action<object>(SearchNext));
                }
                return searchNextCommand;
            }
            set
            {
                searchNextCommand = value;
                RaisedPropertyChanged("SearchNextCommand");
            }
        }
        public void SearchNext(object Parameter)
        {
            if (searchRepairs.Count > 0)
            {
                if (searchRepairs[0].Serial_Number.Contains(SearchText))
                {
                    if (searchPosition < searchRepairs.Count)
                    {
                        SelectedItem = (v_Repairs)searchRepairs[searchPosition];
                        searchPosition++;
                    }
                    else if (searchPosition == searchRepairs.Count)
                    {
                        SelectedItem = (v_Repairs)searchRepairs[0];
                        searchPosition = 1;
                    }
                    else
                    {
                        searchPosition = 0;
                        searchCount = 0;
                        searchRepairs.Clear();
                    }
                }
            }
        }

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2020-02-12
    • 2021-07-17
    • 2013-08-03
    相关资源
    最近更新 更多