2017-02-15 71 views
0

WPF 4.6我有一个列表网格,并希望打开一个基于行选择,传递ID的视图。我越来越没有传递到新的细节:MVVMCross WPF网格行命令没有通过参数

电网ListView的XAML

<DataGridTemplateColumn Width="Auto"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate > 
      <Button Content="Edit Line" 
       Command="{Binding DataContext.EditClientLineCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
       CommandParameter="{Binding}" 
       Margin="5" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

ListViewModel(CustomerInfo是行项目)

public DetailsParameters _thisparams; //simple class with int index only 

我设置的时候选择了一行:

public CustomerInfo SelectedCustomer 
    { 
     get { return _selectedCustomer; } 
     set 
     { 
      _selectedCustomer = value; 
      _thisparams.Index = _selectedCustomer.Id; 
      RaisePropertyChanged(() => SelectedCustomer); 
     } 
    } 

然后作为参数传递

private MvxCommand<CustomerInfo> _goToDetails; 
public MvxCommand<CustomerInfo> EditClientLineCommand 
{ 
    get { return _goToDetails ?? 
     (_goToDetails = new MvxCommand<CustomerInfo> 
      (SelectedCustomer => { 
       ShowViewModel<CustomerDetailViewModel> 
      (_thisparams);} 
     ) 
     ); 
    } 
} 

和DetailViewModel启动地区:

public void Init(DetailsParameters thisid) 
{ 
    _customerId = thisid.Index; 
} 

customerId0

而且,后来我退了出去,并重新选择另一行,我得到的细节(仍然没有分配的),但没有命中Init断点..

回答

0

您应该在绑定中设置Mode=FindAncestor

RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}} 
+0

更好的XAML也许,但没有修复。我认为我在早期版本... – tdrake

+0

@tdrake请发送您的代码的其他部分。 – Ron

0

问题1修正: 我将DetailsParameters类更改为static - 这对我很有意义。在Stuart的文档中,当他谈论这个课程时,这是一个标准的实例课程......所以我仍然担心我没有遵循正确的设计模式。

较小概率2理解:MVVMCross具有视图堆栈的概念,其中视图在导航时被创建和重用(提前)。通过设计,它会返回以前创建的视图并将其转发,而没有任何'检查数据'的机会......我已经阅读了许多'这是设计'的评论,但对于我的生活,我无法看到为什么你会默认这样做,而不是有一个简单的模式来刷新数据...我还没有找到解决办法,并会发布一个单独的问题。 (在使用Caliburn,MVVMLight并找出那些问题之后......总会有一些东西!!)(Stuart在Mvx方面做得非常出色,但我只用了两天时间,因此我可能错过了一些东西)。