• 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.
  • 相关阅读:
    三十七、Java基础之JDBC
    三十六、Java基础之File类
    各种IoC框架下实现AOP
    Eclipse导出可执行Jar文件(包含第三方Jar包)
    设计模式(Patterns in Java)-解道
    MyBatis入门示例
    freemarker实例2
    freemarker小例子
    MyEclipse8.6 破解以及注册码
    myeclipse中java文件中文注释乱码问题
  • 原文地址:https://www.cnblogs.com/jiangyihz/p/7249124.html
Copyright © 2020-2023  润新知