【问题标题】:LongListSelector set image visibility on selection changeLongListSelector 在选择更改时设置图像可见性
【发布时间】:2016-01-12 21:09:33
【问题描述】:

我有一个LongListSelector,里面有一些textblocks和图片。

如何以编程方式设置图像的可见性?

我将它们设置为collapsed,我想在LongListSelectorselection_changed 事件中启用它们。

XAML:

<phone:LongListSelector Name="LongListSel" Margin="0,-38,-22,2" ItemsSource="{Binding Items}" SelectionChanged="LongListSelector_SelectionChanged">
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Margin="12,2,0,4" Height="110" Width="432">
                            <StackPanel Width="311" Margin="0,0,0,0">
                                <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Margin="10,0" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeLarge}" />
                                <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="10,-2,10,0" Style="{StaticResource PhoneTextSubtleStyle}" />
                            </StackPanel>
                            <StackPanel Name="playImage" Height="50" Width="50" Margin="0,0,10,0">
                                <Image Source="Assets/Tiles/Iconsmind-Outline-Play-Music.ico" Visibility="{Binding ImageVis}" Width="50" Height="50" HorizontalAlignment="Left" Tap="Image_Tap_1"/>
                            </StackPanel>
                            <StackPanel Name="downloadImage" Height="50" Width="50" Margin="0,0,0,0">
                                <Image Source="Assets/Tiles/Download.ico" Visibility="{Binding ImageVis}" Width="50" Height="50" HorizontalAlignment="Left" Tap="Image_Tap_1"/>
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>
        </phone:PanoramaItem>

选择更改事件:

private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ItemViewModel item = new ItemViewModel();
            item.ImageVis = Visibility.Visible;
            //it can't be called the way you are doing it of course and it still doesn't work
        }

视图模型

        private Visibility _imageVis;
        public Visibility ImageVis
        {
            get { return _imageVis; }
            set
            {
                _imageVis = value;
                NotifyPropertyChanged("ImageVis");
            }
        }

【问题讨论】:

  • 将您的项目源设为 Observable 集合。并在实现 INotifyPropertyChanged 的​​ Model 类上添加一个额外的 Visibility 属性。在选择一个项目时,更改所选项目的可见性属性。它将反映在视图上。
  • 如果您的意思类似于下面的示例,则它不起作用

标签: c# events windows-phone-8 windows-phone-8.1 longlistselector


【解决方案1】:

创建一个可见性类型的属性并将其绑定到您的图像可见性。

视图模型:

    private Visibility _DownloadImage;
    public Visibility DownloadImage
    {
        get { return _DownloadImage; }
        set
        {
            if (_DownloadImage != value)
            {
                _DownloadImage = DownloadImage;
                OnPropertyChanged("DownloadImage");
            }
        }
    }

xaml

<Image Source="Assets/Tiles/Download.ico" Visibility="{Binding DownloadImage}" ... />

xaml.cs(我更愿意将命令也绑定到 ViewModel,以保持 MVVM 模式)

private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        DownloadImage = Visibility.Visible;
    }

【讨论】:

  • 你可以使用 Data Trigger 看这里 stackoverflow.com/a/29410912/1876572
  • 那行不通。老实说,在发布到这里之前,我正在做同样的事情。我更新了代码
  • 我正在尝试在单击 TextBlocks btw 时更改图像可见性...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 2013-06-30
  • 2014-08-21
相关资源
最近更新 更多