繁体   English   中英

如何使用XAML,WP 8.1中的DataTrigger行为切换两个按钮的可见性?

[英]How to toggle the visibility of two buttons using DataTrigger Behavior in XAML, WP 8.1?

我有两个按钮 - 按钮A和按钮B.两个按钮最初都是隐藏的。 数据来自Observable Collection OCollection。

这就是我想要实现的目标:

1) 最初,两个按钮都被隐藏。 (完成)

2) 在第一次单击(单击任何列表视图项)时,应使按钮A可见。 (完成)

3) 在其余的点击上(单击任何其他列表视图项目,而不是按钮A保持可见的项目),应使按钮B可见。 按钮A的可见性不应改回Collapsed。

注意: 每个Listview项必须只包含一个Button(按钮A或按钮B)。

OCollection被设置为ListView的ItemSource。 每个ListView项都是一个包含默认图像的网格。

XAML:

     <ListView Name="lv" 
              ItemsSource="{Binding OCollection}" 
              Background="Linen"                  
              Grid.ColumnSpan="3">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="LightGray" Name="buttonGrid" Tag="{Binding dumyString}">
                    <i:Interaction.Behaviors>
                        <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="Equal">
                            <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Visible" />
                        </ic:DataTriggerBehavior>
                        <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=SelectedValue.dumyString}" Value="{Binding dumyString}" ComparisonCondition="NotEqual">
                            <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonA}" PropertyName="Visibility" Value="Collapsed" />
                        </ic:DataTriggerBehavior>
                        <ic:DataTriggerBehavior Binding="{Binding ElementName=lv, Path=buttonGrid.Tag}" Value="{Binding dumyString}" ComparisonCondition="Equal">
                            <ic:ChangePropertyAction TargetObject="{Binding ElementName=ButtonB}" PropertyName="Visibility" Value="Visible" />
                        </ic:DataTriggerBehavior>                            
                    </i:Interaction.Behaviors>

                    <Image Source="/Assets/Logo.png" />
                    <Button Name="ButtonA" Content="ButtonA" Background="Black" Visibility="Collapsed" />
                    <Button Name="ButtonB" Content="ButtonB" Background="Black" Visibility="Collapsed" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

为了实现3,我将网格的标签与按钮内容进行比较。 它不起作用,因为逻辑是错误的。 那么,如何在不使用代码的情况下实现这一目标。 我遵循MVVM模式,所以adios to Code背后。

样本会很好,因为我只是一个初学者。

类:

public class dumyClass
{
    public string dumyString { get; set; }
}

我认为您可以在viewmodel中订阅CollectionChanged事件,然后将您的按钮的可见性绑定到bool属性并通过更改属性的值来处理您的事件。 别忘了BooleanToVisibility转换器。 如果需要,我可以给你一些代码示例。

这是:

public FooViewModel()
    {
        this.OCollection += this.OCollectionChanged;
    }

    private void OCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        var collection = sender as System.Collections.Generic.List<Bar>;
        if (collection != null && collection.Count > 1)
        {
            this.IsButtonVisible = true;
            base.RaisePropertyChanged(() => this.IsButtonVisible);
        }
    }

如果您正在使用MVVM,我希望您知道RaisePropertyChanged的含义是什么,并且您知道如何将按钮的可见性绑定到bool属性。 如果你不明白的话,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM