我正在尝试创建一个弹出窗口,一旦您在文本框中输入一个行号,然后点击一个' Go'按钮,它将带您到DataGrid中的那个行号。
我的问题是,如何通过ViewModel转发DataGrid中的特定行号?
答案 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}">