wpf 向导工具包 ItemsSource 绑定到列表

wpf Wizard Toolkit ItemsSource binding to a List

我正在实施 MVVM 模式并希望使用 WPF 工具包 (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 was unhandled HResult=-2146233067
Message=Wizard should only contain WizardPages.
Source=Xceed.Wpf.Toolkit

如有任何帮助,我们将不胜感激。

TIA, 雷

这显然不受支持,如您在源代码中所见:https://github.com/xceedsoftware/wpftoolkit/blob/master/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Wizard/Implementation/Wizard.cs

恐怕你只能绑定到一个IEnumerable<Xceed.Wpf.Toolkit.WizardPage>

感谢您的回复。 昨晚我试过玩 IConverter class 但运气不好(还)

由于截止日期未定,我决定编写一个简单的转换程序 属性。

    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;
        }
    }