ViewModels であるアイテムが動的に入力される TabControl があります。また、DataTemplate には ViewModel にリンクされた UserControl があります。すべてが機能しており、正常に表示されています。ただし、タブの数に関係なく、SecurityRoleControl のコンストラクターは 1 回しか作成されません。UserControl の構築中に処理ロジックを追加する必要がありますが、問題はアプリケーションで一度しか呼び出されないことです。誰かがこの動作の理由と、おそらく回避策を教えてもらえますか? 高く評価。前もって感謝します。
// MainWindow.XAML code
<TabControl
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding ElementName=AdminMainWindow, Path=Workspaces}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"
Margin="4">
</TabControl>
// Data Template in Dictionary
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel Width="120">
<Button
Command="{Binding Path=CloseCommand}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
Focusable="False"
FontFamily="Courier"
FontSize="9"
FontWeight="Bold"
Margin="0,1,0,0"
Padding="0"
VerticalContentAlignment="Bottom"
Width="16" Height="16" />
<ContentPresenter
Content="{Binding Path=DisplayName}"
VerticalAlignment="Center" />
</DockPanel>
</DataTemplate>
// Binding of ViewModel to UserControl
<DataTemplate DataType="{x:Type vm:SecurityRoleViewModel}">
<uc:SecurityRoleControl />
</DataTemplate>
// Code to add a ViewModel to Workspace
SecurityRoleViewModel workspace = new SecurityRoleViewModel("Security Role Search");
workspace.MRN = viewModel.MRN;
workspaces.Add(workspace);
ICollectionView collectionView = CollectionViewSource.GetDefaultView(workspaces);
if (collectionView != null) {
collectionView.MoveCurrentTo(workspace);
}
// Workspaces
public ObservableCollection<WorkspaceViewModel> Workspaces { get { return workspaces; } }
// Constructor of SecurityRoleControl, which is called only once
public SecurityRoleControl() {
InitializeComponent();
}