我目前正在使用C#(.NET 4.0)和WPF for Windows 7开发触摸屏应用程序.我的问题是我现在可用的触摸屏驱动程序只生成鼠标事件.(不幸的是,制造商没有提供正版Windows 7驱动程序)所以,目前我无法正确地进行测试.
是否有通用的方法告诉Windows 7某个设备应该是一个触摸设备(当然 - 这只能提供单个触摸事件)?
我有一个(外部)模型暴露一个不断变化的List(假设每两秒左右).ViewModel知道该列表注册了PropertyChange事件.ViewModel还为UI提供了一个ObservableCollection以进行数据绑定.
+-----------------------------------------------+
| View|
| +-----------+ |
| |Listbox | |
| +-----------+ |
+-----/\----------------------------------------+
||
||DataBinding
||
||
+-----||----------------------------------------+
| || ViewModel|
| +--------------------+ +-------------+|
| |ObservableCollection|<--------|ChangeHandler||
| +--------------------+ / +-------------+|
| / ^ |
+-------------------------/------------|--------+
/ |
/ |
Synchronizing Lists | PropertyChanged
|
|
+--------------------------------------|--------+
| +-----+ Model|
| |IList| |
| +-----+ |
| |
+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
除了不断进行的更新之外,原则上它运作良好.每次更新时,用户都会放弃他的选择,即每次更新都会取消选择所有项目.这也就不足为奇了,因为WPF的ListBox"看到"分配了一个新列表.
所以,事情必须是我们不分配新的ObservableCollection,而是将当前ObservableCollection的内容与更新的Model.List合并.
现在我的问题
wpf user-interface synchronizing observablecollection c#-4.0
脚本
我从外部组件或代码部件获取模型类,我不想改变某些东西.我想将这个类绑定到一些WPF UI.如果这个模型被改变,我也想刷新UI.
题
我是否真的需要一直编写一个包装类,为每个setter创建PropertyChanged事件?我怎么能阻止手动编写所有这些线索编码?
什么开始这样......
public class User : IUser
{
public String Name { get; set; }
public bool CurrentlyLoggedIn { get; set; }
// ...
}
Run Code Online (Sandbox Code Playgroud)
......总会像这样膨胀
public class UserObservableWrapper : IUser, INotifyPropertyChanged
{
public String Name
{
get
{
return this.innerUser.Name;
}
set
{
if (value == this.innerUser.Name)
{
return;
}
this.innerUser.Name = value;
this.OnPropertyChanged( "Name" );
}
}
public bool CurrentlyLoggedIn
{
get
{
return innerUser.CurrentlyLoggedIn;
}
set
{
if (value.Equals( innerUser.CurrentlyLoggedIn ))
{
return; …Run Code Online (Sandbox Code Playgroud)