wpf mvvm datagrid DataGridTemplateColumn的绑定无效的可能原因之一!

摘要:
还有其他的列表控件listbox等也是一样,在编辑阶段时,通过view的绑定可以直接找到command,但是是不起作用的,要指定绑定的element和path.

昨天在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:
  privateICommand _deleteCommand;

        publicICommand DeleteCommand
        {
            get { return_deleteCommand; }
            set{
                _deleteCommand =value;
                RaisePropertyChanged();
            }
        }
  publicTodoViewModel()
        {
            FreshCommand = new RelayCommand(DoFreshCommand, () => true);
            DeleteCommand = new RelayCommand(DoDeleteCommand, () => true);
            DoneCommand = new RelayCommand(DoDoneCommand, () => true);
        }
 private voidDoDeleteCommand()
        {
            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.

免责声明:文章转载自《wpf mvvm datagrid DataGridTemplateColumn的绑定无效的可能原因之一!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery定位“音视频+”时代到来,除了无人机,EasyDSS应用场景还有哪些?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF-带有GridView的ListView样式

ListView是展示数据的常用控件,这里简单对带有GridView的ListView样式进行设置。 <Style TargetType="{x:Type ListViewItem}"> <Style.Triggers> <Trigger Property="IsSel...

WPF转换器之通用转换器

WPF中的转换器是一个非常好的数据类型转换解决方案,实用和强大, 它的作用是将源数据转换为WPF自身需要的类型,对数据实体没有侵略性,会在项目工程中频繁使用。所以掌握转换器是WPF开发的必备技能。 我刚接触转换器的时候,没有考虑通用性,每次遇到一个转换需求都会去创建一个新的转换器,久而久之,项目中的转换器已多如牛毛 这当然是我无法容忍的,我决定用一种通用...

WPF——菜单栏及TabControl

一、先造一个窗体,然后在窗体里面增加菜单栏及原始的TabControl选项卡 <Grid> <Menu> <MenuItem Header="文件" Click="MenuItem_Click_3"> <MenuItem Header="打...

2019-11-29-WPF-禁用实时触摸

title author date CreateTime categories WPF 禁用实时触摸 lindexi 2019-11-29 10:20:52 +0800 2018-5-4 21:0:38 +0800 WPF 触摸 微软想把 WPF 作为 win7 的触摸好用的框架,所以微软做了很多特殊的兼容。为了获得真实的触摸消息,微软提供了...

WPF DataGrid多选功能开发

<DataTemplate x:Key="CheckBoxDataTemplate"> <Grid x:Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> <CheckBox...

WPF入门教程系列一——基础

WPF入门教程系列目录 WPF入门教程系列二——Application介绍 WPF入门教程系列三——Application介绍(续) WPF入门教程系列四——Dispatcher介绍 WPF入门教程系列五——Window 介绍 WPF入门教程系列六——布局介绍与Canvas(一) WPF入门教程系列七——布局之WrapPanel与StackPanel(二)...