我用mvvm灯学习wpf并且我遇到了问题。 我有一个带有查询的数据网格的用户控件。
现在我想在selectedIndex上添加一个事件来检索选定的行,然后我将该值传递给另一个用户控件。
问题是我的活动永远不会被解雇。
这就是我做的事情
<DataGrid HorizontalAlignment="Left" Name="dgUser" VerticalAlignment="Top" SelectedIndex="{Binding SelectedIndex, Mode=TwoWay}" SelectedItem="{Binding selectedRow, Mode=TwoWay}" Width="800" Height="253" >
以下是我的viewmodel
的代码public RelayCommand selectedRow { get; private set; }
private int _selectedIndex;
public int SelectedIndex
{
get { return _selectedIndex; }
set
{
_selectedIndex = value;
RaisePropertyChanged("SelectedIndex");
}
}
/// <summary>
/// Initializes a new instance of the ListUserViewModel class.
/// </summary>
public ListUserViewModel()
{
selectedRow = new RelayCommand(() => SelectedRowChange());
SelectedIndex = 2;
}
private void SelectedRowChange()
{
System.Windows.MessageBox.Show("test");
}
未使用SelectedXIndex = 2选择我的行 当我选择另一行时没有任何事情发生
答案 0 :(得分:0)
您正在尝试将ViewModel上的Command
绑定到DataGrid的SelectedItem
,但这并不是它的工作方式。
您想要挂钩DataGrid.SelectionChanged
事件,并且可能会在此时触发您的ViewModel的RelayCommand
。
Check this answer有关如何在XAML中执行此操作的详细说明。
编辑:
要将SelectedItem
作为命令参数传递给RelayCommand
,请在XAML中使用以下内容:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding MyCommand}"
CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
并确保将RelayCommand
更改为您希望的类型。
注意:您尚未提供DataGrid
中所有商品的类型,因此我会在此处使用object
。
public RelayCommand<object> selectedRow { get; private set; }
然后,您可以依赖命令的参数作为所选项目:
public ListUserViewModel()
{
selectedRow = new RelayCommand(i => SelectedRowChange(i));
SelectedIndex = 2;
}
private void SelectedRowChange(object selectedItem)
{
// selectedItem is the item that has just been selected
// do what you wish with it here
System.Windows.MessageBox.Show("test");
}