1

私の WPF アプリケーションでは、n 個のユーザー コントロールを行と列の形式で投稿する必要があります。私のユーザーコントロールは

私のユーザーコントロールは

行数は n で、列数はユーザーが使用するビューに応じて 1 または 2 になります。

ここに私の UserControls を含むコレクションがあります

private Collection<TemplateView> _templates;
public Collection<TemplateView> Templates { get { return _templates; } set { _templates = value; } }

そして、これが私が使用した XAML コードです。

<ItemsControl ItemsSource="{Binding Templates}">
      <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                  <UniformGrid Columns="{Binding NumColumns}" />
            </ItemsPanelTemplate>
       </ItemsControl.ItemsPanel>
       <ItemsControl.ItemContainerStyle>
           <Style>
                <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
                <Setter Property="Grid.Row" Value="{Binding RowIndex}" />
            </Style>
        </ItemsControl.ItemContainerStyle>
        <ItemsControl.ItemTemplate>
              <DataTemplate>
                   <v:TemplateView Content="{Binding }" />
              </DataTemplate>
        </ItemsControl.ItemTemplate>
</ItemsControl>

v:TemplateView は、n 個のコピーを行/列に投稿する必要がある UserControl です。

UserControl のコントロールのバインドを示す XAML の一部を次に示します。

 <Label Content="{Binding Title, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
 <Label Content="{Binding Type, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
 <TextBlock><Hyperlink Command="{Binding DetailsViewCommand}">Details</Hyperlink>
        </TextBlock>
 <TextBlock><Hyperlink Command="{Binding AddCommand}">Add</Hyperlink>

そして、ここに私のUserControlのVIewModelのコードがあります

  private ICommand _detailsViewCommand;
    public ICommand DetailsViewCommand { get { return _detailsViewCommand ?? (_detailsViewCommand = new RelayCommand(DetailsView)); } }

    public void DetailsView()
    {

    }

    private ICommand _addCommand;
    public ICommand AddCommand { get { return _addCommand ?? (_addCommand = new RelayCommand(Add)); } }

    private void Add()
    {

    }

    private string _layerType;
    public string LayerType
    {
        get { return _layerType; }
        set { _layerType = value; }
    }

    private string _title;
    public string Title
    {
        get { return _title; }
        set { _title = value; }
    }

この UserControl のすべてのコピーは、ラベルとイメージで異なる情報を保持します。したがって、ユーザーが [詳細] ボタンを押したときに、どの UserControls (または Templates Collection のどのアイテム) がクリックされたかを、userControl の ViewModel で知る必要があります。

上記の XAML とコードでは、[詳細] ボタンのクリックでクリックされたアイテム/ユーザー コントロールがわかりません。では、2 つのタスクをどのように達成すればよいのでしょうか。

4

0 に答える 0