如何通过ViewModel转到DataGrid中的特定行号

时间:2014-03-25 04:19:22

标签: c# wpf mvvm

我正在尝试创建一个弹出窗口,一旦您在文本框中输入一个行号,然后点击一个' Go'按钮,它将带您到DataGrid中的那个行号。

我的问题是,如何通过ViewModel转发DataGrid中的特定行号?

3 个答案:

答案 0 :(得分:0)

viewmodel与datagrid的行号无关。 viewmodel甚至不知道集合绑定到数据网格。对我来说,你的情况只是视图相关,你应该在后面的代码中执行此操作。如果您要搜索收藏品中的ID号,那么视图模型就有意义了

答案 1 :(得分:0)

如果你从viewmodel填充datagrid,那么你将在ViewModel中拥有整个列表,所以如果你选择99行你就可以

private ObservableCollection<CollectionType> _ItemSource;

public ObservableCollection<CollectionType> ItemSource
{
  get
  {
       return _ItemSource;
  }
  set
  {
    if(_ItemSource!=value)
     {
        _ItemSource=value;
      OnPropertyChanged("ItemSource");
     }
  }
}

在你的按钮命令中只取行ID(例如:99)

按钮命令中的

SelectedGridItem = ItemSource.skip(97).take(1).firstorDefault;

这将选择所选项目为paticular行,如果您选择的项目适合您并且模式为TwoWay。

答案 2 :(得分:0)

最后我选择了附属物

class SearchProperties
{
    #region DialogResult

    public static readonly DependencyProperty ItemToScrollIntoViewProperty =
        DependencyProperty.RegisterAttached("ItemToScrollIntoView", typeof(int?), typeof(SearchBehaviours), new PropertyMetadata(default(int?), OnItemToScrollIntoViewChanged));

    private static void OnItemToScrollIntoViewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var dg = d as DataGrid;
        if (dg == null)
            return;

        if (dg.Items.Count < 1)
            return;

        if (e.NewValue == null)
            return;

        int? new_value = (int?)e.NewValue;
        if (new_value != null)
        {
            int nonNullValue = new_value.GetValueOrDefault() - 1;
            object item = dg.Items[nonNullValue];
            dg.SelectedIndex = nonNullValue;
            dg.ScrollIntoView(item);
        }
    }

    public static int? GetItemToScrollIntoView(DependencyObject dp)
    {
        if (dp == null) throw new ArgumentNullException("dp");

        return (int?)dp.GetValue(ItemToScrollIntoViewProperty);
    }

    public static void SetItemToScrollIntoView(DependencyObject dp, object value)
    {
        if (dp == null) throw new ArgumentNullException("dp");

        dp.SetValue(ItemToScrollIntoViewProperty, value);
    }

    #endregion
}

在视图中,当我在文本框中输入数字并单击“确定”时,将值绑定到ViewModel属性,“确定”命令将SelectedGridItem设置为输入的数字:

<DataGrid helpers:SearchProperties.ItemToScrollIntoView="{Binding SelectedGridItem}">