首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommandParameter不在ListView工作

CommandParameter不在ListView工作
EN

Stack Overflow用户
提问于 2013-08-17 08:39:44
回答 1查看 590关注 0票数 1

我是winRT的新手,在这方面做了很多工作。

我已经创建了一个DemoViewModel,在其中我声明了如下所示的DemoClickCommand。该命令为DelegateCommand类型。

代码语言:javascript
复制
public DelegateCommand DemoClickCommand { get; private set; }

protected virtual void OnClickCommandExecuted(object parameter)
    {
      var obj = parameter;
    }

    protected virtual bool OnClickCommandCanExecute(object parameter)
    {
      return true;
    }

public DemoViewModel()
    {
      this.DemoClickCommand = new DelegateCommand(this.OnClickCommandExecuted, this.OnClickCommandCanExecute);
    }

我已经将此命令绑定到窗体上的一个按钮上,该按钮本身工作正常,但如果包含在使用数据板的listView中,则无法工作。

代码语言:javascript
复制
 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<!-- THIS BUTTON WORKS FINE-->    
<Button Content="Button"
            HorizontalAlignment="Left"
            Height="143"
            Margin="1354,424,0,0"
            VerticalAlignment="Top"
            Width="307"
            Background="#FFC11A1A"
            FontSize="36"
            Command="{Binding DemoClickCommand, Mode=OneWay}" />
<!-- THIS LISTVIEW WHICH USES THE DATATEMPLATE WONT WORK -->
    <ListView x:Name="lvDemoItems"
              SelectionChanged="lvDemoItems_SelectionChanged"
              Grid.Column="0"
              Margin="0,140,0,0"
              ItemTemplate="{StaticResource DemoTemplate}"
              ItemsSource="{Binding DemoItems}"
              SelectionMode="Single"
              HorizontalAlignment="Left"
              Width="904">
    </ListView>

  </Grid>

这是在我的页面资源中定义的数据模板。

代码语言:javascript
复制
<Page.Resources>
    <DataTemplate x:Name="DemoTemplate">
      <Grid Height="110"
            Width="480"
            Margin="10">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"
                Width="110"
                Height="110">
          <Image Source="{Binding ImageURI}"
                 Stretch="UniformToFill"
                 AutomationProperties.Name="{Binding Title}" />
        </Border>
        <StackPanel Grid.Column="1"
                    VerticalAlignment="Top"
                    Margin="10,0,0,0">
          <TextBlock Text="{Binding Name}"
                     Style="{StaticResource TitleTextStyle}"
                     TextWrapping="NoWrap" />
          <TextBlock Text="{Binding Description}"
                     Style="{StaticResource BodyTextStyle}"
                     MaxHeight="160" />
          <Button Content="Edit"
                  BorderBrush="Black"
                  Background="Green"
                  Height="40"
                  Width="80"
                  Margin="0,20,0,0"
                  Command="{Binding DemoClickCommand, Mode=OneWay}"
                  CommandParameter="{Binding ID}" />
        </StackPanel>
      </Grid>
    </DataTemplate>

  </Page.Resources>

我认为我需要使用附加依赖属性,但不确定如何实现这一点。

到目前为止,这就是我所拥有的,但我不知道如何使它发挥作用。你能帮我解释一下吗?谢谢

代码语言:javascript
复制
public ICommand DemoClickCommand { get; private set; }

    public static readonly DependencyProperty DemoClickCommand =
        DependencyProperty.RegisterAttached("DemoClickCommand", typeof(ICommand), typeof(Button), new PropertyMetadata(null, OnItemCommandPropertyChanged));

    private static void OnClickCommandPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
      ICommand command = e.NewValue as ICommand;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-17 10:45:01

在WPF值继承中,从下到上完成继承。例如,当您将特定字体设置为堆栈面板和堆栈面板中的所有子控件时,默认情况下将获得相同的字体。在带有数据板的代码片段中,有一个按钮绑定到DemoClickCommand,它是ListView控件的子控件,ItemsSource是DemoItems。DemoItems没有一个名为DemoClickCommand的属性。因此,您需要显式地提到按钮的祖先类型。请在您的DataTemplate代码中尝试以下XAML代码片段

代码语言:javascript
复制
<Button Content="Edit"
              BorderBrush="Black"
              Background="Green"
              Height="40"
              Width="80"
              Margin="0,20,0,0"
              Command="{Binding Path=DemoClickCommand, Mode=OneWay, RelativeSource={RelativeSource AncestorType={x:Type Window}}}}"
              CommandParameter="{Binding ID}" />

也可以使用BindingElementName属性进行同样的操作。为您的ManGrid命名并使用

代码语言:javascript
复制
<Button Content="Edit"
          BorderBrush="Black"
          Background="Green"
          Height="40"
          Width="80"
          Margin="0,20,0,0"
          Command="{Binding ElementName="MyGrid" Path=DemoClickCommand, Mode=OneWay}"
          CommandParameter="{Binding ID}" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18286826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档