如何使用SelectedItem(mvvm方法)在网格单元格上显示子窗口

时间:2014-04-22 13:03:16

标签: c# silverlight xaml mvvm selecteditem

我是一名c#silverlight初学者,我必须使用mvvm方法来完成我的任务。 我已经创建了一个如下所示的GUI:

http://prntscr.com/3c6ak5

<UserControl x:Class="DEV_CENTER.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:vm="clr-namespace:DEV_CENTER"
             xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <UserControl.Resources>
        <vm:ProgramViewModel x:Key="ProgramViewModel"/>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <data:DataGrid Grid.Row="0" x:Name="gridPrograms" AutoGenerateColumns="False" ItemsSource="{Binding Path=Progr}" IsReadOnly="True"  DataContext="{StaticResource ProgramViewModel}" >
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="SerialNumber" Binding="{Binding Path=SerialNumber}" Width="2*"></data:DataGridTextColumn>
                <data:DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" Width="2*"></data:DataGridTextColumn>
                <data:DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}" Width="3*"></data:DataGridTextColumn>
            </data:DataGrid.Columns>
        </data:DataGrid>
    </Grid>
</UserControl>

现在我必须通过点击&#34; sso&#34;来创建子窗口。和#34; program2&#34;的另一个子窗口单击标题下方的SerialNumber)。此子窗口还包含一些按钮和文本框。

我应该在哪里进行更改。我必须使用Mvvm方法来执行此操作。 正在使用&#34;选择列表&#34;一个正确的方法,如果我使用&#34;选择列表&#34;然后如何绑定它以及如何将它与Model.cs和ViewModel.cs链接?有人可以帮我提供一些ViewModel.cs和Model.cs以及View.xaml的代码吗? 会是一个很大的帮助。感谢

注意:请注意我不需要Gala和任何第三个库(我更喜欢使用SelectedItem绑定)

1 个答案:

答案 0 :(得分:1)

我认为你可以通过使用DataGridTemplateColumn来实现你想要做的事情,如下所示http://www.silverlightshow.net/items/The-DataGrid-Column-types.aspx

<DataGrid.Columns>
    <DataGridTemplateColumn Header="Serial Number">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock x:Name="btnSerialNumber" Text="{Binding SerialNumber}" PreviewMouseLeftButtonDown="btnSerialNumber_Click" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

或使用样式,仅定位DataGridCell,如http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing

所示

将样式添加到控件资源

<Style TargetType="{x:Type DataGridCell}" x:Key="DataGridCellClickStyle">  
    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown"></EventSetter>
</Style>

然后添加CellStyle并引用上面创建的DataGridCellClickStyle

<DataGridTextColumn Header="SerialNumber" Binding="{Binding Path=SerialNumber}" Width="2*" CellStyle={StaticResource DataGridCellClickStyle}"/>'

确保使用DataGridTemplateColumn或仅将样式应用于SerialNumber列。 然后在btnSerialNumber_Click或DataGridCell_PreviewMouseLeftButtonDown事件处理程序中,您可以获取绑定到它的确切单元格和对象,然后您可以启动第二个窗口