zoukankan      html  css  js  c++  java
  • wpf mvvm datagrid DataGridTemplateColumn的绑定无效的可能原因之一!

    昨天在mvvm wpf的开发中遇到一个问题,绑定不起作用,编辑阶段没问题也没有提示找不到对应的绑定,但是在运行之后却不起作用,查了很多资料,说法不一,有些是要删除datagrid的一行,直接绑定delete即可,但是我要绑定的是viewmodel的command,最终解决问题了,特分享如下(已解决):

    view:

    <DataGrid ItemsSource="{Binding TodoList}"
                      AutoGenerateColumns="False"
                      CanUserAddRows="False"
                      CanUserDeleteRows="False"
                      CanUserReorderColumns="False"
                      CanUserResizeColumns="False"
                      CanUserResizeRows="False"
                      CanUserSortColumns="False"
                      IsReadOnly="True"
                      SelectedItem="{Binding SelectedItem}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Title"
                                        Binding="{Binding Title}">
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="Text"
                                        Binding="{Binding Text}">
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="InsertDateTime"
                                        Binding="{Binding InsertDateTime}">
                    </DataGridTextColumn>
                    <DataGridTextColumn Header="EstimateDateTime"
                                        Binding="{Binding EstimateDateTime}">
                    </DataGridTextColumn>
                    <DataGridTemplateColumn Header="Delete">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="Delete"
                                        Command="{Binding DeleteCommand}">
                                </Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                   
                </DataGrid.Columns>
            </DataGrid>
    其中
    DataGridTemplateColumn的button的command绑定无效,不起作用,
    viewmodel:
      private ICommand _deleteCommand;
    
            public ICommand DeleteCommand
            {
                get { return _deleteCommand; }
                set
                {
                    _deleteCommand = value;
                    RaisePropertyChanged();
                }
            }
      public TodoViewModel()
            {
                FreshCommand = new RelayCommand(DoFreshCommand, () => true);
                DeleteCommand = new RelayCommand(DoDeleteCommand, () => true);
                DoneCommand = new RelayCommand(DoDoneCommand, () => true);
            }
     private void DoDeleteCommand()
            {
                if (SelectedItem == null) return;
                MongoDbProvide.Delete<TodoInfos>(p => p._id == SelectedItem._id);
                TodoList.Remove(SelectedItem);
            }

    修改view如下解决:

    <DataGridTemplateColumn Header="Delete">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="Delete"
                                        Command="{Binding ElementName=TodoViewTitle,
                                                          Path=DataContext.DeleteCommand}">
                                </Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
    TodoViewTitle 为这个view的名称

    总结:因datagrid已经指定了
    ItemsSource="{Binding TodoList}"
    所以内部的列的绑定会默认去找这个
    ItemsSource的属性,如果要绑定一个独立的dp,必须要在绑定时指定element和path。
    还有其他的列表控件listbox等也是一样,在编辑阶段时,通过view的绑定可以直接找到command,但是是不起作用的,要指定绑定的element和path.
  • 相关阅读:
    useState回调函数
    Ahook
    我的创业和职业观点
    一个超级工业软件的能力在哪
    【542】Mac上面修改jupyter notebook默认打开页面
    【541】shapely 相关功能
    【540】时间戳数字转换为格式化时间
    【539】地球两点距离以及面积计算
    【538】二维数据实现随机采样
    新春首发!Spring Boot 2 个新版本...
  • 原文地址:https://www.cnblogs.com/jiangyihz/p/7249124.html
Copyright © 2011-2022 走看看