如何明确设置绑定路径?

问题描述 投票:0回答:1

我有一个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代码移动到我不想做的客户类之外,我不知道如何修复它。

我最后一次努力实现这项工作就是明确的选择。

c# wpf mvvm
1个回答
1
投票

您可以将绑定的RelativeSource设置为指向DataGrid,然后绑定到其DataContext的属性:

<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.ViewJobAction, UpdateSourceTrigger=Explicit}"
        Content="View Job" />
© www.soinside.com 2019 - 2024. All rights reserved.