绑定datagrid编辑Silverlight中viewmodel的超链接

时间:2011-10-25 23:53:17

标签: silverlight xaml binding mvvm

如何绑定datagrid中的Edit链接,我正在使用以下代码,但是无法在我的viewmodel中将selecteditem绑定到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始终为null。

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,Hyperlink的数据上下文不是您的ViewModel,而是父DataGrid的ItemsSource属性(我们无法从您的代码片段中看到)。

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

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