【问题标题】:OnNext event for wizard on WPF toolkit packageWPF 工具包上向导的 OnNext 事件
【发布时间】:2016-05-27 00:56:30
【问题描述】:

我正在使用 WPF 工具包包进行向导类。 从一个页面我想根据单选按钮的选择跳转到另一个页面(如果单击是,则从第 3 页转到第 4 页,否则,表示单击否单选按钮,因此从第 3 页转到第 5 页) 我看到没有 OnNext 事件,但是有一个名为 NextPage 的属性。 我试过了:

On .xaml:
 <xctk:WizardPage.NextPage>
            <MultiBinding Converter="{StaticResource NextPageSelectionFromPage3}">
                <Binding ElementName="yesForBAM" Path="IsChecked" Mode="OneWay"/>
                <Binding ElementName="noForBAM" Path="IsChecked" Mode="OneWay"/>
            </MultiBinding>
        </xctk:WizardPage.NextPage>

On .xaml.cs:
public class NextPageSelectionFromPage3 : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values[0] is bool && values[1] is bool)
            if ((bool)values[0])
                return "Page4";
        return "Page5";

    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

任何想法如何实现依赖 OnNext 事件?

谢谢!

【问题讨论】:

  • 希望我的回答对您有所帮助。想补充一点,最好在 ViewModel 中处理 NextPage/PreviousPage 的逻辑,当您的 RadioButons 绑定到 VM 属性时,VM 依次公开页面的 Enum 属性,使用转换器将其转换为 WizardPage。在这种情况下,单元测试会更有效。

标签: c# wpf data-binding wpftoolkit wizard


【解决方案1】:

您的转换器的问题是您返回字符串,而 NextPage 属性是 WizardPage 类型。但是您可以使用纯 XAML 中的触发器来执行此操作,而无需转换器:

        <xctk:WizardPage>
            <xctk:WizardPage.Style>
                <Style TargetType="{x:Type xctk:WizardPage}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsChecked, ElementName=yesForBAM}" Value="True">
                            <Setter Property="NextPage" Value="{Binding ElementName=page4}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsChecked, ElementName=noForBAM}" Value="True">
                            <Setter Property="NextPage" Value="{Binding ElementName=page5}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </xctk:WizardPage.Style>


            <StackPanel Orientation="Vertical">
                <TextBlock Text="3" />
                <RadioButton Name="yesForBAM" Content="Show 4 page" IsChecked="True"/>
                <RadioButton Name="noForBAM" Content="Do not show 4 page"/>
            </StackPanel>
        </xctk:WizardPage>

        <xctk:WizardPage Name="page4">
            <TextBlock Text="4" />

        </xctk:WizardPage>

        <xctk:WizardPage Name="page5">
            <TextBlock Text="5" />
        </xctk:WizardPage>

或使用转换器。主要思想仍然是您应该返回 WizardPage,而不是字符串。

C#

public class NextPageSelectionFromPage3 : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values[0] is bool && values[1] is bool)
            if ((bool)values[0])
                return values[2];

        return values[3];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML

            <xctk:WizardPage.NextPage>
                <MultiBinding Converter="{StaticResource NextPageSelectionFromPage3}">
                    <Binding ElementName="yesForBAM" Path="IsChecked" Mode="OneWay"/>
                    <Binding ElementName="noForBAM" Path="IsChecked" Mode="OneWay"/>
                    <Binding ElementName="page4" Mode="OneWay"/>
                    <Binding ElementName="page5" Mode="OneWay"/>
                </MultiBinding>
            </xctk:WizardPage.NextPage>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2015-01-13
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多