【问题标题】:How to display a child window on grid cell click using SelectedItem (mvvm approach)如何使用 SelectedItem(mvvm 方法)在网格单元格上显示子窗口
【发布时间】:2014-04-22 13:03:15
【问题描述】:

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

<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>

现在我必须通过单击“sso”来创建一个子窗口,然后单击标题下方的“program2”另一个子窗口(@98​​7654325@)。这个子窗口将包含一些按钮和文本框也是如此。

我应该在哪里进行更改。我必须使用 Mvvm 方法来这样做。 使用“选择列表”是一种正确的方法,如果我使用“选择列表”,那么如何绑定它以及如何将它与 Model.cs 和 ViewModel.cs 链接?有人可以帮我提供一段 ViewModel.cs 和 Model.cs 和 View.xaml 的代码吗? 会有很大的帮助。谢谢

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

【问题讨论】:

    标签: c# silverlight xaml mvvm selecteditem


    【解决方案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>
    

    或者通过使用样式,只针对http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing中所示的DataGridCell

    将样式添加到您的控件资源中

    <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 事件处理程序中,您可以获得绑定到它的确切单元格和对象,然后您可以启动第二个窗口

    【讨论】:

    • 但您的代码中有按钮。我只需要单击网格单元格,它应该有 CHILDWINDOW POP6UP。没有按钮
    • 我还使用 TextBlock 和 PreviewMouseLeftButtonDown 事件而不是 Button 和 Click 事件更新了 DataGridTemplateColumn
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多