【问题标题】:Get selected item in a list from view model从视图模型中获取列表中的选定项目
【发布时间】:2012-02-21 09:42:32
【问题描述】:

早上好!

我正在编写一个使用 WPF 和 MVVM 模式显示任务列表的管理应用程序。用户也可以编辑此列表,但我想使用删除按钮删除选定的行。问题是我不知道如何从 ModelView 访问选定的行,并且我不想使用代码隐藏。我想最好的选择是使用一些绑定,但我不确定如何去做。

这是代码(我使用的是 DevXpress 控件但几乎相同)

<dxg:GridControl  ItemsSource="{Binding Path=TaskView}" Loaded="GridControl_Loaded">
       <dxg:GridControl.Columns>
            <dxg:GridColumn Visible="False" DisplayMemberBinding="{Binding Path=ID, Mode=OneWay}" />
            <dxg:GridColumn Header="Project" DisplayMemberBinding="{Binding Path=ProjectCode, Mode=TwoWay}" AllowEditing="True" ContentChanged="OnHoursChanged"/>
            <dxg:GridColumn Header="Project Description" DisplayMemberBinding="{Binding Path=ProjectName, Mode=TwoWay}" AllowEditing="False"/>
            <dxg:GridColumn Header="Description" DisplayMemberBinding="{Binding Path=ProjectDescription, Mode=TwoWay}" AllowEditing="True"/>
            <dxg:GridColumn Header="Comment" DisplayMemberBinding="{Binding Path=Comment, Mode=TwoWay}" AllowEditing="True"/>
            <dxg:GridColumn Header="{Binding ElementName=mon,Path=Text}" DisplayMemberBinding="{Binding Path=HoursMonday, Mode=TwoWay}" AllowEditing="True" FieldName="M" />
            <dxg:GridColumn Header="{Binding ElementName=tue,Path=Text}" DisplayMemberBinding="{Binding Path=HoursTuesday, Mode=TwoWay}" AllowEditing="True" FieldName="T" />
            <dxg:GridColumn Header="{Binding ElementName=wed,Path=Text}" DisplayMemberBinding="{Binding Path=HoursWednesday, Mode=TwoWay}" AllowEditing="True" FieldName="W" />
            <dxg:GridColumn Header="{Binding ElementName=thu,Path=Text}" DisplayMemberBinding="{Binding Path=HoursThursday, Mode=TwoWay}" AllowEditing="True" FieldName="Th" />
            <dxg:GridColumn Header="{Binding ElementName=fri,Path=Text}" DisplayMemberBinding="{Binding Path=HoursFriday, Mode=TwoWay}" AllowEditing="True" FieldName="F" />
            <dxg:GridColumn Header="{Binding ElementName=sat,Path=Text}" DisplayMemberBinding="{Binding Path=HoursSaturday, Mode=TwoWay}" AllowEditing="True" FieldName="Sat" />
            <dxg:GridColumn Header="{Binding ElementName=sun,Path=Text}" DisplayMemberBinding="{Binding Path=HoursSunday, Mode=TwoWay}" AllowEditing="True" FieldName="Sun" />
            <dxg:GridColumn Header="Total" DisplayMemberBinding="{Binding Path=Total, Mode=OneWay}" AllowEditing="False" FieldName="Tot" />
        </dxg:GridControl.Columns>
    </dxg:GridControl>

你有什么想法吗?

非常感谢!

【问题讨论】:

    标签: c# wpf mvvm wpfdatagrid


    【解决方案1】:

    你的虚拟机应该有一个Project SelectedProject { get; set; } 属性。

    从 Grid 到它的 SelectedRow(或其他东西)的 bin:

    ItemsSource="{Binding Path=TaskView}" SelectedItem="{Binding Path=SelectedProject}"
    

    【讨论】:

    • 好吧是 SelectedTask,因为一个任务有一个关联的项目,但是是相同的。但是如何在 XAML 中绑定到这个属性呢?
    • SelectedItem="{Binding Path=SelectedProject}" 是我要找的,谢谢!
    • 哦,等等!,它无法解析 SelectedItem.. 似乎该属性不可用
    • 我假设 DevXpress GridControl 中没有 SelectedItem 属性。这是一个替代解决方案:devexpress.com/Support/Center/e/E1724.aspx。对于原始的 wpf datagrid Henks 解决方案完美运行。
    • 我应该说我没有 Telerik,我在猜。没有 SelectedRow 或类似的?奇数。
    【解决方案2】:

    类似这样的:

    <dxg:GridControl Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="5"  Margin="4,4,4,4"
                                 Name="gridDatos"
                                 ItemsSource="{Binding Usuarios}" IsFilterEnabled="True"
                                 >
                    <dxg:GridControl.View>
                        <dxg:TableView AllowPerPixelScrolling="True" AllowEditing="False" NavigationStyle="Row"
                                       AllowHorizontalScrollingVirtualization="False"
                                       ShowGroupPanel="False"
                                       FocusedRow="{Binding SelectedUsuario, Mode=TwoWay}"/>
                    </dxg:GridControl.View>
                    <dxg:GridControl.Columns>
                        <dxg:GridColumn FieldName="usuario_us" ReadOnly="True" Header="Usuario" Width="133" />
                        <dxg:GridColumn FieldName="nombre_us"  ReadOnly="True" Header="Nombre" Width="308" />
                        <dxg:GridColumn FieldName="activo_us"  ReadOnly="True" Header="Activo" />
                    </dxg:GridControl.Columns>
                </dxg:GridControl>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      相关资源
      最近更新 更多