0

Lisview で Usercontrol を使用して DelegateCommand を使用するにはどうすればよいですか? 私のリストビューでは、次のように使用しています:

<ListView x:Name="peopleListBox">

                <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                            <UserControls:ItemTemplateControl QuestionText="{Binding parametr}"/>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
<ListView>

私は UserControl でそれを試しています:

 <Button Content="Click" Command="{Binding Path=DataContext.OpenCommand, ElementName=peopleListBox}"/>

この:

 <Button Content="Click" Command="{Binding Path=OpenCommand, ElementName=peopleListBox}"/>

このコードはどちらも機能しません。

ユーザーコントロール:

<UserControl
    x:Class="App13.UserControls.ItemTemplateControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local1="using:App13"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid>
        <Button Content="Click" Foreground="Black" Command="{Binding Path=DataContext.OpenCommand, ElementName=peopleListBox}"/>

    </Grid>
</UserControl>
4

1 に答える 1

0

peopleListBoxユーザー コントロールの XAML 内では使用できません。親コントロールで定義されたフィールドであり、子コントロールではアクセスできません。

あなたが提供したコードは私にとってはうまくいきます(リストビューテンプレートボタンのクリックはコマンドハンドラを呼び出します):

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView x:Name="peopleListBox">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Button Command="{Binding 
                                           DataContext.OpenCommand, 
                                           ElementName=peopleListBox}" />
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

私が使用したビューモデル:

public class VM
{
    public VM()
    {
        OpenCommand = new RelayCommand(o => {  });
    }

    public RelayCommand OpenCommand { get; set; }
}

メイン ウィンドウ コンストラクタは次のとおりです。

public MainWindow()
{
  InitializeComponent();
  DataContext = new VM();
  peopleListBox.Items.Add(new object());
}

peopleListBoxそして明らかに、ユーザーコントロール内では使用できません。親コントロールで定義されたフィールドであり、子コントロールではアクセスできません。

于 2013-10-05T14:05:06.630 に答える