小编Sha*_*kar的帖子

如何将删除操作(在WPF Datagrid中)绑定到视图模型中的命令或属性

我有一个datagrid和一个视图模型,它有一个Obtableable的"Person"类集合,它作为datagrid的ItemSource.

Datagrid有两个文本列"FirstName"和"LastName"

datagrid将"CanUserAddRows"和"CanUserDeleteRows"设置为true.因此,用户可以使用删除按钮添加新行并删除它们.

当用户尝试删除行时,我想验证他是否可以删除该行.如果他可以删除它,它将被删除,否则将显示错误,并且不能删除该行.像我们在relay命令中那样的东西

新的RelayCommand(parm => this.DeletePerson(parm),this.CanDeletePerson(parm)

这可能吗 ?如果是这样的话?

  • 吉里贾

wpf mvvm

12
推荐指数
1
解决办法
2万
查看次数

为什么这种多重绑定不起作用

我从Checkbox命令发送了多个参数.我用过转换器.代码如下.如果我放一个调试器,看到这里的值是我的结果:

选中或取消选中复选框检查时:

在转换器中它有teh值(项目对象的数组和布尔值).但是当我来到我的方法时,值是一个对象[2],但两个值都是NULL

CheckBox XAML

 <CheckBox x:Name="checkBox" 
              Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Data.Label}"   
              ClickMode="Release"
              Command="{Binding Path=DataContext.SelectUnSelect}">
        <CheckBox.CommandParameter>
            <MultiBinding Converter="{StaticResource SelectedItemConverter}">
                <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Content.Data"/>
                <Binding RelativeSource="{RelativeSource Self}" Path="IsChecked"/>
            </MultiBinding>
        </CheckBox.CommandParameter>
Run Code Online (Sandbox Code Playgroud)

转换器:

 public class CheckConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return values;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
} 
Run Code Online (Sandbox Code Playgroud)

查看型号命令代码:

public ICommand SelectUnSelect
    {
        get { return new RelayCommand<object>(parm => this.SelectAndUnSelect(parm));}
    }
Run Code Online (Sandbox Code Playgroud)

如果我在SelectAndUnSelect方法中放置一个调试器,它会在parm中显示对象[2],但它们都是null.

观察:如果我将我的命令参数绑定到任何一个绑定,它工作正常. …

wpf wpf-controls

8
推荐指数
1
解决办法
3439
查看次数

单击WPF datagrid,组合框模板列上的编辑

我有三列的agrid:

  1. 友好名称
  2. 大陆名称
  3. 国家的名字

第一列是可编辑的文本框列。第二列是显示大洲列表的组合框。第三列是一个组合框,它根据第二列中选择的大陆显示国家列表。我想为这些列实现单击。我尝试了此链接中给出的解决方案 在WPF DataGrid中单击编辑

但这仅适用于第一列,而不适用于其他两列(DataGridTemplateColumn)。

这怎么可能。请提出建议。示例XAML和数据描述如下。

<DataGrid Grid.Row="1" VerticalAlignment="Top"
                                   ItemsSource="{Binding Path=GeographyData,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                  Style="{StaticResource DataGridStyleNormal}">
                            <DataGrid.Columns>
                                <DataGridTextColumn Width="*" Header="Friendly name" Binding="{Binding Path=FriendlyName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                                <!--FilterDef -->
                                <DataGridTemplateColumn Width="*"
                                                        Header="Continents">
                                    <DataGridTemplateColumn.CellEditingTemplate>
                                        <DataTemplate>
                                            <ComboBox SelectedValue="{Binding ContinentId, Mode=TwoWay}"
                                                      SelectedValuePath="ID"
                                                      DisplayMemberPath="Name"
                                                      ItemsSource="{Binding Path=DataContext.ContinentsAndCountries,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"/>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellEditingTemplate>
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock>
                                               <TextBlock.Text>
                                                    <MultiBinding Converter="{StaticResource ContinentCaptionConverter}">
                                                          <Binding Path="ContinentId"/>
                                                          <Binding Path="DataContext.ContinentsAndCountries" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}"/>
                                                        </MultiBinding>
                                                </TextBlock.Text>
                                            </TextBlock>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                                <!--Level-->
                                <DataGridTemplateColumn Width="*"
                                                        Header="Countries">
                                    <DataGridTemplateColumn.CellEditingTemplate>
                                        <DataTemplate>
                                            <ComboBox SelectedValue="{Binding CountryId, Mode=TwoWay}"
                                                      SelectedValuePath="ID"
                                                      DisplayMemberPath="Name">
                                                <ComboBox.ItemsSource>
                                                    <MultiBinding Converter="{StaticResource CountryValuesConverter}">
                                                        <Binding Path="DataContext.ContinentsAndCountries" …
Run Code Online (Sandbox Code Playgroud)

wpf wpfdatagrid

3
推荐指数
1
解决办法
6232
查看次数

标签 统计

wpf ×3

mvvm ×1

wpf-controls ×1

wpfdatagrid ×1