C#Wpf MVVM使XamRibbon选项卡依赖于所选对象

时间:2015-11-20 12:20:41

标签: c# wpf mvvm

目前,我拥有模型中的对象列表,其中包含视图中的所有选定项目。

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 &amp; 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原则,所以我一直在寻找一种不同的方法来做到这一点,尽管没有成功。此外,这不是设计良好的代码。

我希望有一个想法,这可以引导我走上正确的道路。

1 个答案:

答案 0 :(得分:1)

我的功能区中只有一个ContentControl,其内容绑定到主VM上的RibbonContextVM属性。

当上下文发生变化时,

RibbonContextVM被设置为适当的VM类型(例如CheckBoxContextVM),并且ContentControl使用通常的DataTemplate映射显示适当的视图。 / p>

可以通过ContextChangedCommand向VM通知上下文更改,该<param name="testing"></param>是从视图中的代码调用以响应焦点更改。它可以采用string / type / enum / whatever作为其命令参数。