C# 如何更新WPF';当I';我在实现MVVM吗?(无任何按钮)
我已经制作了一个没有MVVM的WPF应用程序,并且我确实使用了一些事件(比如CellEditEnding)来更新我的行,但是现在我想在MVVM中做同样的事情,所以我不打算使用任何事件,我应该在我的ViewModel中这样做 我怎么做?(我喜欢只更新更改的行的方式)。我想使用Datagrid的功能,而不是使用任何按钮,如更新按钮C# 如何更新WPF';当I';我在实现MVVM吗?(无任何按钮),c#,wpf,mvvm,C#,Wpf,Mvvm,我已经制作了一个没有MVVM的WPF应用程序,并且我确实使用了一些事件(比如CellEditEnding)来更新我的行,但是现在我想在MVVM中做同样的事情,所以我不打算使用任何事件,我应该在我的ViewModel中这样做 我怎么做?(我喜欢只更新更改的行的方式)。我想使用Datagrid的功能,而不是使用任何按钮,如更新按钮 顺便说一句,当我完成这项工作时,我会使用完整的积垢系统 在我看来,WPF和MVVM最重要的“东西”是数据绑定。因此,您不必确切地告诉GUI要做什么(如CellEditE
- 顺便说一句,当我完成这项工作时,我会使用完整的积垢系统
- 在我看来,WPF和MVVM最重要的“东西”是数据绑定。因此,您不必确切地告诉GUI要做什么(如CellEditEnding等),而是将编辑工作留给GUI(视图),只需在Viewmodel中处理数据
正如您在下面的示例中所看到的(虽然很简单),没有关于如何更新单元格之类的代码,只有一个数据绑定—将ObservableCollection绑定到DataGrid的ItemsSource
例如:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication12="clr-namespace:WpfApplication12"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<WpfApplication12:MainWindowViewModel />
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding PersonList}">
</DataGrid>
</Grid>
</Window>
C#代码隐藏:
public class MainWindowViewModel : INotifyPropertyChanged
{
public MainWindowViewModel()
{
PersonList = new ObservableCollection<Person>()
{
new Person(){Name="Bobby"}
};
}
public ObservableCollection<Person> PersonList { get; set; }
public void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class Person : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged("Name");
}
}
}
public void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public类MainWindowViewModel:INotifyPropertyChanged
{
公共主窗口视图模型()
{
PersonList=新的ObservableCollection()
{
新人(){Name=“Bobby”}
};
}
公共ObservableCollection个人列表{get;set;}
公共void OnPropertyChanged(字符串p)
{
if(PropertyChanged!=null)
{
房地产变更(这是新的房地产变更发展(p));
}
}
公共事件属性更改事件处理程序属性更改;
}
公共类人员:INotifyPropertyChanged
{
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置
{
如果(名称!=值)
{
名称=值;
不动产变更(“名称”);
}
}
}
公共void OnPropertyChanged(字符串p)
{
if(PropertyChanged!=null)
{
房地产变更(这是新的房地产变更发展(p));
}
}
公共事件属性更改事件处理程序属性更改;
}
正如我前面所说的,这很简单,因为它只是让你开始 在我看来,WPF和MVVM最重要的“事情”是数据绑定。因此,您不必确切地告诉GUI要做什么(如CellEditEnding等),而是将编辑工作留给GUI(视图),只需在Viewmodel中处理数据
正如您在下面的示例中所看到的(虽然很简单),没有关于如何更新单元格之类的代码,只有一个数据绑定—将ObservableCollection绑定到DataGrid的ItemsSource
例如:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication12="clr-namespace:WpfApplication12"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<WpfApplication12:MainWindowViewModel />
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding PersonList}">
</DataGrid>
</Grid>
</Window>
C#代码隐藏:
public class MainWindowViewModel : INotifyPropertyChanged
{
public MainWindowViewModel()
{
PersonList = new ObservableCollection<Person>()
{
new Person(){Name="Bobby"}
};
}
public ObservableCollection<Person> PersonList { get; set; }
public void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class Person : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
OnPropertyChanged("Name");
}
}
}
public void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public类MainWindowViewModel:INotifyPropertyChanged
{
公共主窗口视图模型()
{
PersonList=新的ObservableCollection()
{
新人(){Name=“Bobby”}
};
}
公共ObservableCollection个人列表{get;set;}
公共void OnPropertyChanged(字符串p)
{
if(PropertyChanged!=null)
{
房地产变更(这是新的房地产变更发展(p));
}
}
公共事件属性更改事件处理程序属性更改;
}
公共类人员:INotifyPropertyChanged
{
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置
{
如果(名称!=值)
{
名称=值;
不动产变更(“名称”);
}
}
}
公共void OnPropertyChanged(字符串p)
{
if(PropertyChanged!=null)
{
房地产变更(这是新的房地产变更发展(p));
}
}
公共事件属性更改事件处理程序属性更改;
}
正如我前面所说的,这很简单,因为它只是让你开始 法扎德,你运气好吗?我也被困在同一个问题上,找不到任何现实世界的答案比下面坦德隆的答案“简单入门”更有用!谢谢Tendlon,但是我们已经过了简单的阶段,并且深入到了不那么简单的阶段,我如何将这一行的变化转换成我的DB?!法扎德,你运气好吗?我也被困在同一个问题上,找不到任何现实世界的答案比下面坦德隆的答案“简单入门”更有用!谢谢Tendlon,但是我们已经过了简单的阶段,并且深入到了不那么简单的阶段,我如何将这一行的变化转换成我的DB?!