私の 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 つのタスクをどのように達成すればよいのでしょうか。