【问题标题】:Bind datagrid Edit hyperlink to viewmodel in silverlight在silverlight中绑定datagrid编辑超链接到viewmodel
【发布时间】:2011-10-25 23:53:17
【问题描述】:

如何在数据网格中绑定编辑链接,我正在使用以下代码,但无法在我的视图模型中将选定项绑定到 seletcedMember:

<sdk:DataGrid x:Name="MembersListDataGrid" Height="Auto" 
                          ItemsSource="{Binding Members}" 
                          SelectedItem="{Binding SelectedMember, Mode=OneWay}" 
                          AutoGenerateColumns="False" ColumnWidth="*" IsReadOnly="True">
    <sdk:DataGrid.Columns>
       <sdk:DataGridTemplateColumn>
                        <sdk:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                               <Button x:Name="myButton" Content="Edit"   HorizontalAlignment="Center"  
            VerticalAlignment="Center" Margin="5" >
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="Click">
                                            <mvvmlightcmd:EventToCommand  
                    Command="{Binding Main.MemberDetailViewCommand, Mode=TwoWay, Source={StaticResource Locator}}" 
                     CommandParameter="{Binding}" PassEventArgsToCommand="True" 
                    />
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
                                </Button>
                            </DataTemplate>
                        </sdk:DataGridTemplateColumn.CellTemplate>
                    </sdk:DataGridTemplateColumn>

                </sdk:DataGrid.Columns>
    </sdk:DataGrid>

在我的视图模型中,我有 SelectedMember 属性:

  public Member SelectedMember
    {
        get
        {
            return _SelectedMember;
        }
        set
        {
            if (_SelectedMember != value)
            {
                _SelectedMember = value;
                RaisePropertyChanged("SelectedIMember");
            }
        }
    }

我单步执行代码并执行我的命令,但 SelectedMember 始终为空。

【问题讨论】:

  • 什么是 MemberDetailViewCommand?属于哪一种? DataGrid的dataContext绑定了什么?

标签: silverlight xaml binding mvvm


【解决方案1】:

请记住,对于 DataGrid,DataGrid 中的每一列都会将其上下文设置为网格数据上下文的数据成员。当您设置 DataGrid 的 ItemsSource 时,您实际上是在定义父 DataContext,它将用作每列数据成员的源。

在您的情况下,超链接的数据上下文将不是您的 ViewModel,而是父 DataGrid 的 ItemsSource 属性(我们无法从您的代码 sn-p 中看到)。

您需要在 XAML 中将该命令设为 StaticResource,或者使用相对绑定来获取父控件的 DataContext。

有关如何执行此操作的示例,请参阅 this post

【讨论】:

  • 嗨,我编辑了我的代码,现在我点击了命令,但有问题让 SelectedMember 绑定到数据网格的 SelectedItem
  • @user282807 - 在您的 RaisePropertyChanged 语句中,您在“选定”和“成员”之间有一个“我”。尝试将其更改为“SelectedMember”并查看是否有效。
  • 是的,我确实看到并修复了它,但没有任何区别。
  • 为了测试,我在后面的代码中添加了一个 selectionchanged,我可以看到所选项目,但我无法通过 xaml 绑定在 viewmodel 中设置它。
  • 看起来行选择干扰了按钮单击,我在 SelectedMember 属性上放置了一个断点,而不是单击编辑按钮,我只是单击了一行并击中断点,填充了 SelectedMember,但是当我再次单击编辑按钮时,selectedmember 回到 null,如果这就是 SelectedMember 为 null 的原因,有没有办法禁用行选择?
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
相关资源
最近更新 更多