我正在將事件驅動的應用程序轉換爲MVVM,並嘗試將代碼隱藏最小化。其中一個視圖有一個DataGrid,我用一個實現了ICommandSource的UserControl放置了一個列。當您單擊控件(「LinkLabel」)時,應用程序應爲DataRow的綁定對象啓動一個新選項卡。所以我已經將DataGrid的SelectedItem屬性綁定到ViewModel中的相應屬性。一切工作正常,只要用戶先選擇DataRow,然後單擊LinkLabel。但這不是典型的用戶行爲。如何使用帶有MVVM模式的XAML識別DataGrid的行
我的問題是:如何讓我的DataGrid選擇父DataRow之前發射命令?我想這不是概念上的解決方案,但它(希望)能夠解決問題。
的DataGrid
<DataGrid Name="dgPeople" MouseDoubleClick="dgPeople_MouseDoubleClick"
ItemsSource="{Binding CollectionOfPeople}" SelectedValuePath="DatabaseId" SelectedItem="{Binding SelectedPerson}"
AutoGenerateColumns="False" RowHeaderWidth="0" IsReadOnly="True"
ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"
Grid.Row="1" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<view:LinkLabel Content="{Binding FullName}"
Command="{Binding Source={StaticResource vm}, Path=LaunchPersonDetailCmd}"
FontWeight="Normal" VerticalAlignment="Center" Margin="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
...
<DataGridTextColumn Header="Job Title" Binding="{Binding JobTitle}"
Width="*" />
<DataGridTextColumn Header="Status" Binding="{Binding Status}"
Width="*" />
...
</DataGrid.Columns>
我可以提供其他的代碼需要,但沒有別的似乎直接相關。
謝謝!
謝謝馬克。你對LinkLabel是正確的。它實際上只是一個標籤,它的格式看起來像一個超鏈接,然後擴展來實現ICommandSource,因此它需要一個CommandParameter。它可能更簡單地作爲一個DataTemplate完成,但它運行良好,我不會搞砸它。 – DPH
我會用參數方法修補 - 這是個好主意。再次感謝。 DPH – DPH
跟進。你完全正確。我擺脫了LinkLabel,並用帶有樣式按鈕的DataTemplate替換了它。我仍在調整細節,但這是一個更清潔的解決方案......哦,並使用按鈕的CommandParameter傳遞上下文。再次感謝。 DPH – DPH