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

时间:2018-11-12 21:49:34

标签: c# wpf wpftoolkit toolkit xceed

我正在实现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, 雷

2 个答案:

答案 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)

您在源代码https://github.com/xceedsoftware/wpftoolkit/blob/master/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Wizard/Implementation/Wizard.cs

中可以看到,显然不支持此功能。

恐怕您只能绑定到IEnumerable<Xceed.Wpf.Toolkit.WizardPage>