我正在实现MVVM模式,并希望使用WPF ToolKit(Xceed.Wpf.Toolkit)中的向导控件来设计我的界面。
我想做的是将向导的项目源绑定到List<ViewModelBase>
并使用DataTemplate
将其显示为页面。到目前为止,还没有喜悦。 :-(
我已经尽可能地减少了代码,但这是它的实质。
我的视图XAML:
<xctk:Wizard FinishButtonClosesWindow="True" ItemsSource="{Binding Pages}" />
我的数据模板:
<DataTemplate DataType="{x:Type vm:ViewModelBase}">
<xctk:WizardPage Title="{Binding DisplayName}" Description="{Binding DisplayDescription}"/>
</DataTemplate>
在cs文件中: VM,定义返回列表的属性:
public List<ViewModelBase> Pages
在app.xaml.cs中:
var viewModel = new ViewModels.winMainViewModel();
winMain window = new winMain();
window.DataContext = viewModel;
window.Show();
引发的错误是:
未处理System.NotSupportedException HResult = -2146233067
Message =向导应只包含WizardPages。
来源= Xceed.Wpf.Toolkit
任何帮助将不胜感激。
TIA, 雷
答案 0 :(得分:2)
感谢您的回复。 昨晚,我尝试了一个没有运气的IConverter类(至今)
由于截止日期的到来,我决定编写一个简单的转换属性。
public List<WizardPage> wizPages
{
get
{
List<WizardPage> rtn = new List<WizardPage>();
foreach (ViewModelBase vmb in Pages)
{
rtn.Add(new WizardPage()
{ Title = vmb.DisplayName
, Description = vmb.DisplayDescription
, DataContext = vmb
}); // rtn.Add
} // foreach (ViewModelBase vmb in Pages)
return rtn;
}
}
答案 1 :(得分:1)
恐怕您只能绑定到IEnumerable<Xceed.Wpf.Toolkit.WizardPage>
。