目前,我拥有模型中的对象列表,其中包含视图中的所有选定项目。
name = str(profilePageSource.find(class_="hzi-font hzi-Man-Outline").div.get_text().encode("utf-8"))[2:-1]
我的视图包含一个XamRibbon,我想根据所选对象添加ContextualTabs(很像在Office Word中,当您选择一个表时,一个专门创建的上下文选项卡用于格式化显示)。
问题是,这些对象的类型可能不同(TextBox,Button,自定义对象等)。找出要显示哪个上下文选项卡的最佳方法是什么?我将如何做?
无视MVVM,它可能如下所示:
<div class="profile-about-right">
<div class="text-bold">
SF Peninsula Interior Design Firm
<br/>
Best of Houzz 2015
</div>
<br/>
<div class="page-tags" style="display:none">
page_type: pro_plus_profile
</div>
<div class="pro-info-horizontal-list text-m text-dt-s">
<div class="info-list-label">
<i class="hzi-font hzi-Ruler">
</i>
<div class="info-list-text">
<span class="hide" itemscope="" itemtype="http://data-vocabulary.org/Breadcr
umb">
<a href="http://www.houzz.com/professionals/c/Menlo-Park--CA" itemprop="url
">
<span itemprop="title">
Professionals
</span>
</a>
</span>
<span itemprop="child" itemscope="" itemtype="http://data-vocabulary.org/Bre
adcrumb">
<a href="http://www.houzz.com/professionals/interior-designer/c/Menlo-Park-
-CA" itemprop="url">
<span itemprop="title">
Interior Designers & Decorators
</span>
</a>
</span>
</div>
</div>
<div class="info-list-label">
<i class="hzi-font hzi-Man-Outline">
</i>
<div class="info-list-text">
<b>
Contact
</b>
: Lisa Staprans
</div>
</div>
</div>
</div>
然后,ManageCheckBoxItems()将创建一个ContextualTabGroup并从代码隐藏中添加某些元素。
可以像这样接收objectType:
private List<Object> _objectList;
public List<Object> ObjectList
{
get { return _objectList; }
set { _objectList = value; }
}
不幸的是,这会违反MVVM原则,所以我一直在寻找一种不同的方法来做到这一点,尽管没有成功。此外,这不是设计良好的代码。
我希望有一个想法,这可以引导我走上正确的道路。
答案 0 :(得分:1)
我的功能区中只有一个ContentControl
,其内容绑定到主VM上的RibbonContextVM
属性。
RibbonContextVM
被设置为适当的VM类型(例如CheckBoxContextVM
),并且ContentControl
使用通常的DataTemplate
映射显示适当的视图。 / p>
可以通过ContextChangedCommand
向VM通知上下文更改,该<param name="testing"></param>
是从视图中的代码调用以响应焦点更改。它可以采用string / type / enum / whatever作为其命令参数。