Ale*_*sev 5 c# silverlight wpf xaml mvvm
我正在尝试选择以MVVM方式实现此UI的最佳方法.我是WPF的新手(比如2个月),但我有很棒的WinForms经验.
这里的ListBox就像一个TabControl(所以它将视图切换到右边),基本上包含表格中显示的项目类型.所有UI都是动态的(ListBox项,TabItems和Columns在运行时确定).该应用程序的目标是WPF和Silverlight.
ViewModel需要的类:
public abstract class ViewModel : INotifyPropertyChanged {}
public abstract class ContainerViewModel : ViewModel
{
public IList<ViewModel> Workspaces {get;set;}
public ViewModel ActiveWorkspace {get;set;}
}
public class ListViewModel<TItem> where TItem : class
{
public IList<TItem> ItemList { get; set; }
public TItem ActiveItem { get; set; }
public IList<TItem> SelectedItems { get; set; }
}
public class TableViewModel<TItem> : ListViewModel<TItem> where TItem : class
{
public Ilist<ColumnDescription> ColumnList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是如何将其连接到View.
我可以在这里看到两种基本方法:
ListView<T> : UserControl.
接下来,如何连接数据,我在这里看到3种方法(使用XAML或不使用此处无关紧要).由于没有简单的DataBinding到DataGrid的Columns或TabControl的TabItems,我看到的方法是:
通过在View中订阅INotifyPropertyChanged来使用手动逻辑:ViewModel.PropertyChanged + = .... ViewModel.ColumnList.CollectionChanged + = ....
使用支持此绑定的自定义控件:我自己编写代码或找到支持此绑定的3d派对控件(我不喜欢这个选项,我的WPF技能太低而无法自己编写代码,我怀疑我会找到免费控件)
更新:28.02.2011 事情变得越来越糟糕,我决定使用TreeView而不是ListBox,这是一场噩梦.您可能猜测TreeView.SelectedItems是一个只读属性,因此没有数据绑定.嗯,好吧,让我们用旧的方式做,并订阅事件来与viewmodel同步视图.此时突然发现DisplayMemberPath对TreeView没有任何作用(嗯,好吧让我们以旧的方式使用ToString()).然后在View的方法中我尝试将ViewModel.SelectedItem与TreeView同步:
private void UpdateTreeViewSelectedItem()
{
//uiCategorySelector.SelectedItem = ReadOnly....
//((TreeViewItem) uiCategorySelector.Items[uiCategorySelector.Items.IndexOf(Model.ActiveCategory)]).IsSelected = true;
// Will not work Items's are not TreeViewItem but Category object......
//((TreeViewItem) uiCategorySelector.ItemContainerGenerator.ContainerFromItem(Model.ActiveCategory)).IsSelected = true;
//Doesn't work too.... NULL // Changind DataContext=Model and Model = new MainViewModel line order doesn't matter.
//Allright.. figure this out later...
}
Run Code Online (Sandbox Code Playgroud)
我所能想到的方法都没有奏效....
这里是我的示例项目的链接,演示了MVVM控制库地狱:http://cid-b73623db14413608.office.live.com/self.aspx/.Public/MVVMDemo.zip
我写了一篇文章和一个带有源代码的示例应用程序,我在其中讨论并展示了我在这里提到的问题以及如何解决这些问题。
http://alexburtsev.wordpress.com/2011/03/05/mvvm-pattern-in-silverlight-and-wpf/
归档时间: |
|
查看次数: |
2371 次 |
最近记录: |