将可见性 属性 用于多个用户控件 wpf

using the visibility property for multiple usercontrol wpf

我有一个场景,我需要根据它们的可见性显示多个用户控件 属性 并在单击下一个按钮时显示下一个可见控件。我已经在堆栈面板中添加了所有用户控件,这似乎不是一个好主意,我认为它确实会影响应用程序的性能。有人可以帮助我指导什么是定义这种情况的最佳方式。

 <StackPanel Grid.Row="3" Grid.Column="0" Margin="4 4 28 0" ScrollViewer.CanContentScroll="True">
                <Border BorderThickness="3" BorderBrush="LightGray" >
                    <StackPanel>
                    <controls:ICUC x:Name="ICU" BorderBrush="CadetBlue" Visibility="{Binding Visibilityicuc}"    ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center"  Height="210"  />
                        <controls:J1939 x:Name="J1939eng" BorderBrush="CadetBlue" Visibility="{Binding Visibilityj1939}"  ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center"  Height="210"  />
                    <controls:p_code x:Name="pcodengg" BorderBrush="CadetBlue" Visibility="{Binding Visibilitypcode}"   ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center"  Height="210"  />
                        <controls:Diagnostic_Developer x:Name="diagdev" BorderBrush="CadetBlue" Visibility="{Binding Visibilitysgdd}"   ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="Auto" Width="Auto"/>
                    </StackPanel>
                </Border>
            </StackPanel>

最近刚在工作中实施了完全相同的事情。这是您的代码的改编版本,希望对您有所帮助。

视图模型:

public class ExampleClass
{
    private int section { get; set; }

    public Visibility Visibilityicuc { get; set; } //presume first section
    public Visibility Visibilityj1939 { get; set; } //presume second section
    public Visibility Visibilitypcode { get; set; } //presume third section
    public Visibility Visibilitysgdd { get; set; } //presume fourth section

    public DelegateCommand NextButtonDelegateCommand { get; set; }

    public ExampleClass()
    {
        NextButtonDelegateCommand = new DelegateCommand(Next);
        section = 1; //indicates in first section
    }

    private void SetSectionVisibility(int currSection)
    {
        if (currSection == 1) // if first section
        {
            Visibilityicuc = Visibility.Visible; //section 1
            Visibilityj1939 = Visibility.Hidden;
            Visibilitypcode = Visibility.Hidden;
            Visibilitysgdd = Visibility.Hidden;
        }
        else if (currSection == 2)
        {
            Visibilityicuc = Visibility.Hidden;
            Visibilityj1939 = Visibility.Visible; //section 2
            Visibilitypcode = Visibility.Hidden;
            Visibilitysgdd = Visibility.Hidden;
        }
        else if (currSection == 3)
        {
            Visibilityicuc = Visibility.Hidden;
            Visibilityj1939 = Visibility.Hidden;
            Visibilitypcode = Visibility.Visible; //section 3
            Visibilitysgdd = Visibility.Hidden;
        }
        else if (section == 4)
        {
            Visibilityicuc = Visibility.Hidden;
            Visibilityj1939 = Visibility.Hidden;
            Visibilitypcode = Visibility.Hidden;
            Visibilitysgdd = Visibility.Visible; //section 4
        }
    }

    private void Next()
    {
        if (section == 1)
            SetSectionVisibility(2); //move to next section
        else if (section == 2)
            SetSectionVisibility(3);
        else if (section == 3)
            SetSectionVisibility(4);
        //else if (section == 4)
            //end! special event? unsure
    }
}

我还会对您当前的 XAML 代码做一些细微的更新,以确保其正常工作! 也就是说,确保您的绑定采用以下格式:

Visibility="{Binding Visibilityicuc, Mode=TwoWay, Fallbackvalue=Visibility.Hidden}"    

通过设置项目的默认状态,它将不可见(显然使第 1 部分 Visibility.Visible,而不是隐藏!)。如果您也熟悉 PropertyChanged 事件,我建议您使用它们在特定部分的可见性发生变化时通知您的视图。如果您不熟悉,请回复,我将为您提供代码的实施示例。

谢谢!希望这对您有所帮助