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.
  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/jiangyihz/p/7249124.html
Copyright © 2011-2022 走看看