我正在使用棱鏡和MEF,並且我想動態地將選項卡項添加到選項卡控件W/O違反 Prism - MVVM - MEF規則。 有人可以通過簡單的步驟告訴我/示例如何做到這一點如何以編程方式將選項卡項添加到棱鏡中的選項卡控件
回答
TabControl可以像一些其他控件一樣綁定到集合。以下是我在聊天消息程序中使用的tabcontrol的一個示例。
<TabControl ItemsSource="{Binding Path=Rooms, Mode=OneWay}" SelectedItem="{Binding Path=SelectedRoom, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=RoomName}" x:Name="Header" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
//in here is where you put controls for what you want the tabs to look like.
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
因此,在這個例子中,我有一個名爲「房間」的自定義數據類型「聊天室」,這有一個像ROOMNAME它的屬性的集合。每當用戶創建一個新房間時,它將被添加到Rooms集合中,並創建一個新的tabitem。所以在我的視圖模型:
private ObservableCollection<ChatRoom> _Rooms;
public MainWindowViewModel()
{
this._Rooms = new ObservableCollection<ChatRoom>();
}
public ObservableCollection<ChatRoom> Rooms
{
get { return this._Rooms; }
}
首先,我不是說我的做法是最好的一切可能的辦法......但我只是想,因爲我認爲這很酷:)
你分享可以有TabControl 區域 ...所以你可以簡單地導航到該地區的一些看法:) ...會發生什麼?當您使用某個視圖導航到TabControl區域時...該視圖將作爲新的TabItem添加。
當然有一些事情你必須先做。
您需要修改TabControl樣式。您只需告訴TabControl它可以找到Tab項目的標題。當然,您可以將它添加到應用程序的資源。
所以你需要TabItemStyle ......在這裏你指定是頭文本......這樣的事情...
<Style x:Key="MyTabItemStyle" TargetType="{x:Type TabItem}"> <Setter Property="Header" Value="{Binding Content.DataContext.TabHeaderText, RelativeSource={RelativeSource Self}}"/> ...
而且在默認TabControlStyle使用它現在
<Style TargetType="{x:Type TabControl}"> <Setter Property="ItemContainerStyle" Value="{StaticResource MyTabItemStyle}"/> ...
你可以在任何你想要的地方定義TabControl區域。請注意,它應該使用我們之前定義的Style。
<TabControl Regions:RegionManager.RegionName="MyRegion" ... />
現在好了,你可以瀏覽到你的觀點,即區域......當然,你將不得不設置視圖一些視圖模型與字符串屬性TabHeaderText的DataContext的...
現在它應該工作:)當然,我們正在談論導航,所以你應該提供ViewModels [RegionMemberLifetime(KeepAlive = true)]
屬性:)我希望它可以幫助某人某一天。
您需要一個TabControl的區域適配器。我在此對色帶控制,所以你可以從它啓發:
public class RibbonRegionAdapter : RegionAdapterBase<Ribbon>
{
public RibbonRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
protected override void Adapt(IRegion region, Ribbon regionTarget)
{
region.Views.CollectionChanged += (s, e) =>
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
foreach (RibbonTabItem RibbonTab in e.NewItems)
{
regionTarget.Tabs.Add(RibbonTab);
}
}
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
{
foreach (RibbonTabItem RibbonTab in e.OldItems)
{
regionTarget.Tabs.Remove(RibbonTab);
}
}
};
}
protected override IRegion CreateRegion()
{
return new AllActiveRegion();
}
}
在XAML:<Fluent:Ribbon prism:RegionManager.RegionName="{x:Static inf:RegionNames.RibbonRegion}"/>
添加你需要這樣的標籤:
IRegion RibbonRegion = _regionManager.Regions[RegionNames.RibbonRegion];
RibbonRegion.Add(YourTabItemView);
RegionNames僅僅是一類我infrastructe project:
public class RegionNames
{
public static string RibbonRegion = "RibbonRegion";
}
希望能幫到
- 1. 以編程方式添加選項卡,c#選項卡控件
- 2. C#WinForms,將選項卡添加到選項卡控件,然後以編程方式將控件添加到每個選項卡
- 3. 如何以編程方式向AJAX選項卡添加新選項卡?
- 4. 如何將選項卡項目添加到現有的選項卡控件wpf
- 5. 如何將WPF表單添加到選項卡控件的選項卡中
- 6. 檢測何時將選項卡項目添加到WPF選項卡控件
- 7. 以編程方式將選項卡添加到粉絲頁面
- 8. 如何將選項卡添加到Xcode上的選項卡式應用程序
- 9. 動態添加選項卡到選項卡控件
- 10. 將選項卡添加到WPF C#中的現有選項卡控件#
- 11. C#如何以編程方式在控件之間選項卡
- 12. jquery-ui選項卡 - 添加選項卡
- 13. 如何將選項卡添加到選項卡欄控制器? (iOS)
- 14. 所有選項卡添加標題選項卡控件
- 15. 以編程方式創建選項卡
- 16. 在Jquery中以編程方式更改選項卡和選項卡的內容
- 17. Simulink:以編程方式添加控件到simulink掩碼選項卡
- 18. 如何將選項卡添加到TabView
- 19. 使用jQuery將選項卡功能添加到選項卡
- 20. 如何清除舊選項卡並在選項卡上添加新選項卡
- 21. 如何以編程方式設置選定的選項卡SlidingTabLayout
- 22. 如何以編程方式更改選定的選項卡?
- 23. 如何以編程方式選擇Angular UI上的選項卡?
- 24. Opencart如何將產品選項添加到選項卡
- 25. 使用Facebook AP以編程方式添加fanpage選項卡
- 26. 使用PrimeFaces以編程方式添加選項卡
- 27. 以編程方式向ViewController添加選項卡欄
- 28. 你如何以編程方式轉到不同的選項卡?
- 29. HTML選項卡式控件
- 30. 如何將選項卡中的表單控制到選項卡面板中的其他選項卡?