在我的 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 的所有副本都将在标签和图像中携带不同的信息。所以我需要知道在 userControl 的 ViewModel 中,当用户按下 Details 按钮时,点击了哪个 UserControls(或 Templates Collection 中的哪个项目)。
上面的 XAML 和代码没有告诉我在单击详细信息按钮时单击了哪个项目/用户控件。那么我应该如何完成这两个任务呢?