WPF MVVM模式DataGrid更新问题

问题:使用mvvm模式设计,添加单挑信息之后,重新给viewmodel里面的数据赋值的时候(重新从数据库取一次数据集合),界面没有随之更新

代码:
1,使用MVVMLight写了DataGrid的绑定了员工数据集合

部分代码
(已经继承ViewModelBase)

private ObservableCollection<Employee> employeeModelList;
public ObservableCollection<Employee> EmployeeModelList
{
       get { return employeeModelList; }
       set
        {
             employeeModelList = value;
              RaisePropertyChanged("EmployeeModelList");
        }
}  
 public EmployeeBLL employeeBLL = new EmployeeBLL();//数据库Bll
 public EmployeeManageViewModel()
        {
            MsgHelper.RefreshDataGridEvent += MsgHelper_RefreshDataGridEvent;//委托刷新
            if (IsInDesignMode)
            {

            }
            else
            {
                employeeModelList = employeeBLL.GetEmployees();//从数据库拿到list
            }
        }  
private void MsgHelper_RefreshDataGridEvent()//委托事件再从数据库拿一次
        {
            employeeModelList = employeeBLL.GetEmployees();
        }

2,在另外一个添加员工的窗口,向数据库添加一条新数据,并使用委托方法传到员工集合的ViewModel
部分代码

employeeBLL.InsertEmployee(employeeInfo.employeeModel);
MsgHelper.RefreshDataGrid();

3,委托传递类

部分代码

    public delegate void RefreshDataGridHandle();
    public static class MsgHelper
    {
        public static event RefreshDataGridHandle RefreshDataGridEvent;
        public static void RefreshDataGrid()
        {
            RefreshDataGridEvent();
        }
    }

4,经过测试,我将代码加了一句

发现通过集合的Add的是可以更新的,如果是重新赋值一遍是不可以更新的

private void MsgHelper_RefreshDataGridEvent()//委托事件再从数据库拿一次
{
            employeeModelList.Add(new Employee{xxxxxxxxxxxxx});
      employeeModelList = employeeBLL.GetEmployees();
}

如何解决这个问题呢??

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
WPF 采用MVVM模式,ViewModel中如何控制焦点?

如题 WPF 采用MVVM模式,ViewModel中如何控制焦点?

WPF MVVM Binding的数据改变 UI不刷新

如题 ``` <DataGrid x:Name="dataGrid" CanUserAddRows="False" Height="120" Width="1200" AutoGenerateColumns="False" ItemsSource="{Binding DeviceList}" SelectionUnit="Cell"> <DataGrid.Columns> <DataGridCheckBoxColumn Binding="{Binding DeviceSelected}" ClipboardContentBinding="{x:Null}" Header="选择"/> <DataGridTextColumn Binding="{Binding DeviceId}" ClipboardContentBinding="{x:Null}" Header="设备ID" Width="120"/> <DataGridCheckBoxColumn Binding="{Binding DeviceEnable}" ClipboardContentBinding="{x:Null}" Header="可用"/> <DataGridTextColumn Binding="{Binding DeviceIP}" ClipboardContentBinding="{x:Null}" Header="设备IP" Width="120"/> <DataGridTextColumn Binding="{Binding DeviceState}" ClipboardContentBinding="{x:Null}" Header="设备状态"/> <DataGridTextColumn Binding="{Binding DeviceOprate}" ClipboardContentBinding="{x:Null}" Header="运行状态" Width="200"/> <DataGridTextColumn Binding="{Binding DeviceVer}" ClipboardContentBinding="{x:Null}" Header="设备版本" Width="100"/> <DataGridTextColumn Binding="{Binding ProxyHost}" ClipboardContentBinding="{x:Null}" Header="代理IP" Width="120"/> </DataGrid.Columns> </DataGrid> ``` 以上是Xaml的UI ``` var dispatcher = App.Current.Dispatcher; dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (Action)delegate () { var device = DeviceListView.DeviceList.Where(x => x.DeviceId.Equals(e.Device.DeviceId)).FirstOrDefault(); DeviceListView.DeviceList.Add(e.Device); }); ``` 以上是ViewModel修改Binding数据的代码 现在的问题是 数据修改后 UI不刷新显示 但是点击DataGrid 表头后 UI就刷新了 求解

wpf中使用MVVM模式,如何在TabControl中加入TabItem

在wpf中,使用MVVM模式,如何在TabControl中加入TabItem,如何绑定数据

wpf c# 获取datagrid选中行的某列的值

wpf c# 获取datagrid选中行的某列的值==========================

WPF的MVVM模式中tabcontrol多个item页共用一个VM,当一个item页改变了数据源,另一个item数据不刷新

现在有一个要分模块录入和处理信息的功能,用TabControl和下面的多个item页分开录入和处理,基本为总分分分的关系,也就是后面的item页面中数据录入或者改变后第一个页面的信息要做相应的改变,用的是MVVM模式,但是现在的问题就是我在一个item的弹出窗(同一个VM)中改变了数据源,其他的页面都没有反应,怎么办???那些数据只显示初始化时候的内容,我改变以后压根不刷新,求解决办法。

wpf树模板里datagrid绑定问题

datagrid里数据始终不显示,但是树节点数据绑定后显示是正常的,前台代码如下 ``` <TreeView x:Name="departmentTree" Margin="0,0,259,20"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Nodes}"> <StackPanel> <TextBlock VerticalAlignment="Center" FontSize="14" Text="{Binding deptName}" Margin="2,0,0,0"></TextBlock> <Expander> <Grid> <Grid.RowDefinitions> <RowDefinition Height="9*"/> <RowDefinition Height="2*"/> <RowDefinition Height="5*"/> </Grid.RowDefinitions> <DataGrid Name="dgdItem" ItemsSource="{Binding Path=choseItems, RelativeSource={RelativeSource FindAncestor,AncestorType=DataGrid,AncestorLevel=1}}" AutoGenerateColumns="False" CanUserSortColumns="False" > <DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background" Value="#0C8580"/> <Setter Property="Foreground" Value="White"/> <Setter Property="HorizontalContentAlignment" Value="Center"/> </Style> </DataGrid.ColumnHeaderStyle> <DataGrid.Columns > <DataGridTextColumn Header="选项名" Binding="{Binding ChoseName}" IsReadOnly="True" /> <DataGridTextColumn Header="选项内容" Binding="{Binding ChoseContent}" IsReadOnly="True" /> </DataGrid.Columns> </DataGrid> <Button Grid.Row="1" Content="添加" Height="20" Width="60"/> </Grid> </Expander> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> ``` 树节点里datagrid始终不显示数据,但是树节点的绑定却是没有问题的,界面效果如下![图片说明](https://img-ask.csdn.net/upload/201712/20/1513735825_4879.jpg) 数据源后台添加的数据如下 ``` List<DepartmentModel> dplst = new List<DepartmentModel>(){ new DepartmentModel(){id=1,deptName="工位类型",ParentId=0,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=2,deptName="通道2",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=3,deptName="通道1_1",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=4,deptName="通道1_2",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=5,deptName="通道1_3",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=6,deptName="通道1_4",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=7,deptName="通道1_5",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=8,deptName="通道2_1",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=9,deptName="通道2_2",ParentId=1,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=10,deptName="设备2_3",ParentId=2,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=11,deptName="设备2_4",ParentId=3,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=12,deptName="设备1_1_1",ParentId=4,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=13,deptName="设备1_1_2",ParentId=5,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=14,deptName="设备1_2_1",ParentId=6,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}}, new DepartmentModel(){id=15,deptName="设备1_1_1_1",ParentId=7,choseItems=new DGDModel{ChoseName = "ChoseName",ChoseContent = "ChoseContent"}} }; ```

WPF DataGrid动态加载列名 并绑定对应数据

当前已经有一个DataGrid,并且绑定了ItemSource进行数据显示。现在需要根据数据库一张表中的数据字段(例如Students表中的Name字段)在这个DataGrid中动态添加列。并实现前端根据Students表实时进行更新。 代码: <DataGrid ItemsSource="{Binding Schools,UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedBeam}"> <DataGrid.Columns> <DataGridTextColumn Binding="{ Binding Path=Number}" IsReadOnly="True"> <DataGridTextColumn.Header> <TextBlock Text="Number" /> </DataGridTextColumn.Header> </DataGridTextColumn> </DataGrid.Columns> </DataGrid > 当前DataGrid中已有一列表头为Number的的数据,想根据另一个数据源Students中的Name值自动生成对应列(例如表中有Name为Tom和Jimmy,表中会新增Tom、Jimmy为表头的两列)并且数据可以实时根据数据库进行刷新。 各位大佬,请赐教!

wpf中DataGrid如何添加水平滚动条

使用MVVM模式开发是,当DataGrid中没有数据时不会显示水平滚动条,如何设置才可以使得水平 滚动条出现,

WPF DataGrid Button 点击事件

WPF DataGrid中放置一个Button <DataGridTemplateColumn Header="操作"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="查看" Cursor="Hand" ></Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 这个按钮的点击事件怎么做,有参数的话后台怎么接收? 求解答!!!!!!!!!

wpf中DataGrid控件如何使用触发器

在Mvvm模式开发的过程中,当DataGrid中没有数据时,不会显示出水平的滚动条, 为了使水平滚动条显示出来,需要设置DataGrid的CanUserAddRow属性为true,添加一行空白行,才会使得水平的滚动条出现;当DataGrid中有数据时,设置DataGrid的 CanUserAddRow属性为False,不让空白行出现。这样的触发器如何来写,请教各位大神帮帮忙

【急】WPF DataGrid动态添加的列编辑问题

如题。DataGrid 的列是动态添加的。现在编辑某一行之后。再点击另外一行会跳出异常:双向绑定需要Path或XPath 。求大神帮忙~ 前台: ``` <DataGrid x:Name="gridData" CanUserResizeColumns="True" IsReadOnly="False" AutoGenerateColumns="True" CanUserAddRows="False" CanUserDeleteRows="False" ContextMenu="{StaticResource TreeMenu}"> </DataGrid> ``` 后台绑定: ``` gridData.ItemsSource = null; gridData.ItemsSource = _table.AsDataView(); for (int i = 0; i < gridData.Columns.Count; i++) { gridData.Columns[i].IsReadOnly = false; } ```

wpf中DatePicker控件如何绑定数据,怎么获取绑定的数据

在MVVM模式中DatePicker控件如何绑定获取,应该使用什么属性进行绑定,怎么获取绑定的数据

WPF DataGrid如何绑定多个值的计算结果

在DataGrid绑定时,有一列的值是需要前面两列值的相减得出来的结果.而且绑定的实体集合中没有相应的属性. 初学wpf,没用到什么mvvm.就是简单的在后台给ItemsSource赋了一个集合对象. 示例代码: ``` //User类成员 public string Uid{get;set;} public decimal CurrentMoney {get;set;} public decimal PayMoney {get;set;} List<User> list=getUsers(); dataGrid.ItemsSource=list; ``` 在绑定时,前面两列分别绑定的是CurrentMoney和PayMoney. 想在第三列绑定前两列之和. 具体怎么绑定,希望大神们给点具体的实现代码.

wpf 怎么获取HeaderTemplate里面的控件?

<DataTemplate x:Key="SelectAllHeaderTemplate"> <CheckBox Content="全选" x:Name="ckbSelectAll" Checked="ckbSelectedAll_Checked" Unchecked="ckbSelectedAll_Unchecked"/> </DataTemplate> <CommonView:CustomDataGrid.Columns> <WpfToolkit:DataGridTemplateColumn x:Name="dtSelectAll" Header="全选?" Visibility="Collapsed" HeaderTemplate="{StaticResource SelectAllHeaderTemplate}"> <WpfToolkit:DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox HorizontalAlignment="Center" x:Name="ckbSelect" VerticalAlignment="Center" /> </DataTemplate> </WpfToolkit:DataGridTemplateColumn.CellTemplate> </WpfToolkit:DataGridTemplateColumn> </CommonView:CustomDataGrid.Columns> 在DataGrid表头里面添加“全选”复选框,页面刷新时,如果之前用鼠标勾选了复选框,要把复选框勾掉。开始使用binding的方式,尝试失败,后想通过FindName的方式找到这个复选框,然后设置IsChecked属性,可怎么都找不到。求大神指教

c#WPF 一个窗口中两个TreeView,选择A的节点①,再选B的节点②,再选A的节点①时,SelectedItemChanged不能获取到第三次的Ayi

简称treeA ``` <TreeView Grid.Row="3" Name="deviceTreeFromCloud" SelectedItemChanged="deviceTreeFromCloud_SelectedItemChanged"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource MetroTreeViewItem}"> <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="deviceTreeFromCloud_MouseRight_Click"/> </Style> </TreeView.ItemContainerStyle> <TreeView.Resources> <ContextMenu x:Key="OwnerTreeContextMenu" StaysOpen="true" Width="200"> <MenuItem Header="删除此用户及其设备" Click="deleteThisUser_Click" /> </ContextMenu> <ContextMenu x:Key="FacoryTreeContextMenu" StaysOpen="true" Width="200"> <MenuItem Header="删除此厂家及其设备" Click="newButtonForFactory_Click" /> </ContextMenu> <ContextMenu x:Key="FunctionTreeContextMenu" StaysOpen="true" Width="200"> <MenuItem Header="删除此分类及其设备" Click="newButtonForFunction_Click" /> </ContextMenu> </TreeView.Resources> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Path=ChildNodes}"> <StackPanel> <!--<Label Content="{Binding Path=NodeName}" IsHitTestVisible ="False"/>--> <TextBlock Text="{Binding Path=NodeName}" /> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> ``` 简称treeB ``` <TreeView Grid.Row="4" Name="deviceTreeBelongToLocal" SelectedItemChanged="deviceTreeBelongToLocal_SelectedItemChanged"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource MetroTreeViewItem}"> <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="deviceTreeBelongToLocal_MouseRight_Click"/> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate > <HierarchicalDataTemplate ItemsSource="{Binding Path=ChildNodes}" > <StackPanel > <TextBlock Text="{Binding Path=NodeName}" /> <!----> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> <TreeView.Resources> <ContextMenu x:Key="FacoryTreeContextMenu" StaysOpen="true" Width="200"> <MenuItem Header="添加设备分类" Click="AddFacFunction_Click"/> <MenuItem Header="删除厂家" Click="DeleteFactory_Click"/> <MenuItem Header="修改" Click="ModifyFactory_Click"/> </ContextMenu> <ContextMenu x:Key="FunctionTreeContextMenu" StaysOpen="true" Width="200"> <MenuItem Header="添加设备" Click="BtAdd_Click"/> <MenuItem Header="粘贴设备" Click="BtPasteDev_Click"/> <MenuItem Header="删除设备分类" Click="DeleteFacFunction_Click"/> <MenuItem Header="修改" Click="ModifyFacFunction_Click"/> </ContextMenu> </TreeView.Resources> </TreeView> ``` treeA的SelectedItemChanged ``` private void deviceTreeFromCloud_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { BtAdd.Visibility = Visibility.Collapsed; BtDelete.Visibility = Visibility.Collapsed; BtSave.Visibility = Visibility.Collapsed; BtImport.Visibility = Visibility.Collapsed; DataGridDeviceList.Visibility = Visibility.Collapsed; FromeCloud.Visibility = Visibility.Visible; if (sender != null && IsLoaded) { try { var tvItem = (TreeViewItem)e.Source; var itemCount = VisualTreeHelper.GetChildrenCount(tvItem); for (var i = itemCount - 1; i >= 0; i--) { var child = VisualTreeHelper.GetChild(tvItem, i); ((FrameworkElement)child).BringIntoView(); } } catch { } var tvitem = deviceTreeFromCloud.SelectedItem; //selectItem = tvitem; TreeNode seleteNode = new TreeNode(); seleteNode = tvitem as TreeNode; DataTable dtsource = null; if (seleteNode.thisIs == "user") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwner(seleteNode.NodeName); } else if (seleteNode.thisIs == "factory") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.whichOwner + "/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwnerAndFactory(seleteNode.whichOwner,seleteNode.NodeName); } else if (seleteNode.thisIs == "function") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.whichOwner + "/" + seleteNode.whichFactory + "/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwnerAndFactoryAndFunction(seleteNode.whichOwner, seleteNode.whichFactory, seleteNode.NodeName); } ModelHandler<Class_DeviceModel_List> classhelper = new ModelHandler<Class_DeviceModel_List> { }; ObservableCollection<Class_DeviceModel_List> mydevicelist = classhelper.FillModel(dtsource); FromeCloud.ItemsSource = null; FromeCloud.ItemsSource = mydevicelist; } } ``` treeB的SelectedItemChangde ``` private void deviceTreeBelongToLocal_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { BtDelete.Visibility = Visibility.Visible; BtSave.Visibility = Visibility.Visible; BtImport.Visibility = Visibility.Visible; DataGridDeviceList.Visibility = Visibility.Visible; FromeCloud.Visibility = Visibility.Collapsed; if (sender != null && IsLoaded) { var tvitem = deviceTreeBelongToLocal.SelectedItem; selectItem = tvitem; ModelHandler<Class_DeviceModel_List> classhelper = new ModelHandler<Class_DeviceModel_List> { }; TreeNode seleteNode = new TreeNode(); seleteNode = tvitem as TreeNode; DataTable dtsource = null; if (seleteNode.thisIs == "user") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwner(seleteNode.NodeName); BtAdd.Visibility = Visibility.Collapsed; } else if (seleteNode.thisIs == "factory") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.whichOwner + "/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwnerAndFactory(seleteNode.whichOwner, seleteNode.NodeName); BtAdd.Visibility = Visibility.Collapsed; } else if (seleteNode.thisIs == "function") { TextBlockSelectItem.Text = "设备列表/" + seleteNode.whichOwner + "/" + seleteNode.whichFactory + "/" + seleteNode.NodeName; dtsource = StaticDataSource.GetDeviceByOwnerAndFactoryAndFunction(seleteNode.whichOwner, seleteNode.whichFactory, seleteNode.NodeName); BtAdd.Visibility = Visibility.Visible; } ObservableCollection<Class_DeviceModel_List> mydevicelist = classhelper.FillModel(dtsource); DataGridDeviceList.ItemsSource = null; DataGridDeviceList.ItemsSource = mydevicelist; } } ``` 当我选择A或B的节点时,应改显示节点的相关信息 ![图片说明](https://img-ask.csdn.net/upload/201909/30/1569822670_298832.png) ![图片说明](https://img-ask.csdn.net/upload/201909/30/1569822832_377796.png) ![图片说明](https://img-ask.csdn.net/upload/201909/30/1569822792_507628.png) 但是当我从图三再点回图二时,上边的信息是不变化的

wpf datagrid中行往里排列,不是上下排列,也就是说一行覆盖一行

如题所示,我想实现一个datagrid,他的行不是上下显示的,而是一行覆盖一行的。因为我要做一个车辆调度显示功能,一条直线,起点到终点,上面有很多车辆在走(定时刷新位置).想要用datagrid来绑定车辆,所以每一行的左上角的点(x,y)都是一样的,都是(0,0),青大哥大姐帮助,如果有更好的实现方法也请指点,谢谢

wpf 数据模板后台绑定事件的问题

GridViewColumn column = new GridViewColumn(); GridViewColumnHeader h = new GridViewColumnHeader(); h.Content = "??????"; h.Tag = "*******"; column.Header = h; DataTemplate dt = new DataTemplate(); FrameworkElementFactory fef = new FrameworkElementFactory(typeof(CheckBox)); Binding binding = new Binding(); binding.Path = new PropertyPath("MarketIndicator"); fef.SetBinding(CheckBox.ContentProperty, binding); fef.SetValue(CheckBox.ForegroundProperty, Brushes.White); dt.VisualTree = fef; column.CellTemplate = dt; //-----------------------网上找的这段代码,是可以fef.SetValue来给CheckBox属性赋值, 但是如果fef.SetValue(CheckBox.ClickEvent,?); ?位置放什么才对呢,显示是object可是放上我写的事件函数名还是委托都是错误呢???,求如何给上层元素添加事件??

C# System.InvalidOperationException:“双向绑定需要 Path 或 XPath。

![图片说明](https://img-ask.csdn.net/upload/202005/14/1589420636_711710.png) //System.InvalidOperationException:“双向绑定需要 Path 或 XPath。” //在按下界面的datagrid控件时触发绑定的列内容,然后出现此异常 //没有用到SQL数据库,单纯以文本的形式拖拽 //目前参考微软官网WPF发现有动态绑定的信息ObservableCollection //找到一处感觉会有效的文章 Addr:https://www.cnblogs.com/lonelyxmas/p/3510551.html //整理一下,问题解决了 //第一步使用datagrid的CellEditEnding控件和BeginningEdit控件,出处:https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.datagrid.celleditending?view=netcore-3.1 XAML: <DataGrid Height="86" VerticalAlignment="Top" Width="628" ItemsSource="{Binding DishMenus}" AutoGenerateColumns="False" GridLinesVisibility="None" Grid.Row="1" CellEditEnding="dataGrid_CellEditEnding" BeginningEdit="dataGrid_BeginningEdit"> //第二步在cs文件下添加事件 ``` XAML.cs: private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { set_Form_.CellEditEnding((e.EditingElement as System.Windows.Controls.TextBox).Text); } private void dataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { set_Form_.BeginningEdit((e.Column.GetCellContent(e.Row) as TextBlock).Text); } ``` //第三步在 ViewModel层去处理这些事件 ``` static string sTrDataGrid = ""; public void BeginningEdit(string select) { //将修改前的值保存起来 preValue = select; } public void CellEditEnding(string select) { string newValue = select; if (sTrDataGrid != newValue) { Data_Service xds = new Data_Service(); List<Name_DataGrid> dishList = xds.getAllNames(); foreach (Name_DataGrid d in dishList) { if (d.Name == preValue) { var model = dishList.Where(c => c.Name == d.Name).FirstOrDefault(); model.Name = newValue; xds.setAllName(dishList); } } } } ``` //结束,只要肯变强,就不会成为被饿死的徒弟。

WPF中Slider如何对它进行绑定?比如绑定一个List<string>或者String[]

比如,一个List或者String[]里面是从小到大的没有特定规律的String类型,那么Slider的Value就必须在 这个List或者String[]的里面的数据进行滑动,每单击或者滑动一次它的值只能是List或者String[]里面的值,请问各位大神,如何实现?多谢!

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐