如何显式设置绑定路径

本文关键字:路径 绑定 设置 何显式 | 更新日期: 2023-09-27 18:03:06

我有一个wpf桌面应用程序。我正在使用数据网格,我使用视图模型架构填充我的网格。

每一行也有一个按钮。我已经将一个按钮(尝试)绑定到一个命令对象。

This my 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" />