私はCaliburn.Microの初心者ですが、まだ得られていないことがいくつかあります。
最初のViewModel:
1つ目は、他のViewModelのコレクションを管理するViewModelです。
public class NavigationBarViewModel : PropertyChangedBase
{
public BindableCollection<IHaveDisplayName> Items { get; set; }
}
UserControlのルートとしてItemsControl(重要な場合はTelerik RadOutlookBar)があります
そのビューのビューとItemTemplateを設定し、コレクションに挿入するViewModelが対応するRadOutlookBarItemにラップされていることを確認します(ここではItemTemplateの代わりにItemContainerを使用する必要がありますか?)。
<telerik:RadOutlookBar x:Name="Items">
<telerik:RadOutlookBar.TitleTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=DisplayName}" />
</DataTemplate>
</telerik:RadOutlookBar.TitleTemplate>
<telerik:RadOutlookBar.ItemTemplate>
<DataTemplate>
<telerik:RadOutlookBarItem cal:Bind.Model="{Binding}"
Header="{Binding Path=DisplayName}">
<ContentControl />
</telerik:RadOutlookBarItem>
</DataTemplate>
</telerik:RadOutlookBar.ItemTemplate>
</telerik:RadOutlookBar>
このようにして、コレクション内のViewModelをContentControlがある場所に表示しません。モデルをDataTemplateのルート項目にバインドして、規則が機能することを確認しますが、規則を使用してContentControlにバインドする方法がわかりません。もちろん、DataTemplate内のDataContextはViewModel自体です。通常のWPF標準を使用して、Content="{Binding}"を配置します。
これで、モデルはRadOutlookBarItem内にありますが、そのビューは適用されません。Viewも見つかりません。クラス名の文字列だけが見つかります。
これはこれを行うための適切な方法ではありませんか?