【问题标题】:WP8: LongListMultiSelector Tap Item Trigger MVVMWP8: LongListMultiSelector Tap Item Trigger MVVM
【发布时间】:2013-08-18 22:00:00
【问题描述】:

关于 LongListMultiSelector(Windows Phone 8 Toolkit)的另一个问题。 我想在点击 LongListMultiSelector 中的单个项目时启动一个命令。

XAML

  <local:LongListMultiSelector
                    x:Name="FileList"
                    ItemsSource ="{Binding CurrentFileList}"
                    EnforceIsSelectionEnabled="{Binding IsInSelectionMode}" 
                    toolkit:TiltEffect.IsTiltEnabled="True" 
                    IsSelectionEnabled="True" 
                    ItemContainerStyle="{StaticResource FileBrowserLongListMultiSelectorStyle}" 
                    SelectedFiles="{Binding SelectedFiles}">
                    <local:LongListMultiSelector.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Margin="0,0,0,20">
                                <Rectangle Width="80" Height="80" Fill="{StaticResource BoxCryptorGreenBrush}"/>
                                <StackPanel Margin="10,0">
                                    <TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextLargeStyle}"/>
                                    <TextBlock Text="{Binding Size}" Style="{StaticResource PhoneTextSmallStyle}"/>
                                </StackPanel>                
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="Tap">
                                        <i:InvokeCommandAction Command="{Binding TapOnFileCommand}" CommandParameter="{Binding}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>     
                            </StackPanel>
                        </DataTemplate>
                    </local:LongListMultiSelector.ItemTemplate>  
                </local:LongListMultiSelector>

在我的 ViewModel 中:

文件浏览器视图模型

// command
public RelayCommand<File> TapOnFileCommand { get; private set; }

// constructor
public FileBrowserViewModel()
{
    TapOnFileCommand = new RelayCommand<File>(
            TapOnFile,
            (f) => true);
}

// method
private void TapOnFile(File file)
{
   if (file.IsFolder)
   {
        _currentFileList = file.Children;
   }
}

现在 TapOnFileCommand 永远不会执行。 IntelliSense 甚至可以从 XAML 文件中找到命令。 我错过了什么? 我正在使用 Mvvm Light,我不想在后面写(太多)代码。

【问题讨论】:

  • 您是否正在尝试构建文件/文件夹浏览器?如果是这样,您应该查看 codeplex 上的 Coding4Fun FileExplorer
  • 哦,这看起来很有希望。我会在星期一调查一下。非常感谢。

标签: c# xaml mvvm binding windows-phone-8


【解决方案1】:

这是我的解决方案:

我必须在 FileViewModel(列表中的元素)中移动 TapOnFileCommand。 内部的 DataContext 是单个项目本身。 输出给出了相关提示。

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多