我有一个wpf桌面应用程序。我使用的是datagrid,我使用视图模型架构填充网格。
我每行还有一个按钮。我已将一个按钮(已尝试)绑定到命令对象。
这是我的MVVM:
public class Navigation
{
private ICommand _ViewJobAction;
public ICommand ViewJobAction
{
get
{
try
{
if (_ViewJobAction == null)
{
_ViewJobAction = new MyCommand(
param => ViewJob()
);
}
return _ViewJobAction;
}
catch (Exception ex)
{
//handle error
}
return null;
}
}
private void ViewJob()
{
//do some stuff
}
private Customers _CustomerRecords;
public Customers CustomerRecords
{
get
{
return _CustomerRecords;
}
set
{
_CustomerRecords = value; RaisePropertyChanged("CustomerRecords");
}
}
}
public class Customers
{
//get data
}
在我看来:
<DataGrid "{Binding Navigation.CustomerRecords.Records}">
//defined columns
<DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn>
<Button Command="{Binding Navigation.ViewJobAction ,UpdateSourceTrigger=Explicit}" Content="View Job">
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这不会在我的VM中调用我的命令。
在输出窗口中,我得到:
System.Windows.Data Error: 40 : BindingExpression path error: 'Navigation' property not found on 'object' ''CustomerRecord' (HashCode=26023080)'. BindingExpression:Path=Navigation.ViewJobAction; DataItem='CustomerRecord' (HashCode=26023080); target element is 'Button' (target property is 'Command' (type 'ICommand')
现在我想我理解这个错误,但除了将ViewAction代码移动到我不想做的客户类之外,我不知道如何修复它。
我最后一次努力实现这项工作就是明确的选择。
您可以将绑定的RelativeSource设置为指向DataGrid
,然后绑定到其DataContext
的属性:
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.ViewJobAction, UpdateSourceTrigger=Explicit}"
Content="View Job" />