2013-05-13 87 views
4

我的虚拟机具有我的型号Authorization的属性,该属性的属性为ActiveService与Caliburn.Micro绑定到深属性的Combobox

public Authorization Authorization 
    { 
     get 
     { 
      return this.authorization; 
     } 
     set 
     { 
      this.authorization = value; 
      NotifyOfPropertyChange(); 
     } 
    } 

我在我的视图模型创建一个附加属性,称为Services来填充下拉列表:

public IList<Service> Services 
    { 
     get { return services; } 
     set 
     { 
      services = value; 
      NotifyOfPropertyChange(); 
     } 
    } 

我查看有一个名为Services一个combobox控制。我对Caliburn及其惯例的理解是,这应该起作用。但它不能正确显示我的项目。它在列表中有正确数量的项目,但它只显示“无法找到Models.Service的视图”

对我在做什么有什么帮助错误?

编辑

所以我现在试过的是这个;我手动设置的DisplayMemberPath绑定像这样:

DisplayMemberPath="{Binding Authorization_ActiveService_Description}" 

,然后我添加了一个OverrideService对象ToString()像这样:

 public override string ToString() 
    { 
     return string.Format("{0}", this.Description); 
    } 

这工作,因为它现在显示我的描述中落下。虽然我有点困惑。我能够删除_Description,它的工作原理是一样的。如果我删除覆盖它根本不工作。

为什么不对我的描述属性进行深度绑定?

+0

http://stackoverflow.com/questions/11083314/无法找到查看为viewmodel这是类似于我的问题,但从来没有一个决议... – 2013-05-13 16:57:18

+0

嗯...我看不出为什么简单的'SelectedItem'绑定不会在这里工作,但也许我没有理由在图片中丢失了一些东西。 – 2013-05-13 20:16:32

+0

@ Trustme-I'maDoctor你能详细说明你的意思吗?新来WPF,MVVM和Caliburn.Micro所以答案可能只是在于我的无知。 – 2013-05-14 01:36:59

回答

4

缺省情况下,一个ItemsControl(如ComboBox),如果ItemTemplate尚未设置,然后Caliburn.Micro将设置ItemTemplate,其使用用于视图注射ContentControl默认实现,因为它假设每个绑定集合中的项目是视图模型,并且您想要定义视图以绑定到该视图模型。

可以

如果你不想定义视图,但在ComboBox标记宁可定义ItemTemplate的话,如:

<ComboBox x:Name="Services"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBox Text="{Binding Name}" /> 
       <TextBox Text="{Binding AnotherServiceProperty}" />     
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

啊,我的无知可能在这里玩。这不是我不想定义一个观点,而是我不知道我需要。新来WPF,MVVM,Caliburn,整个她爆炸。如何在这种情况下使用“默认”方式进行组合框操作?我需要查看我想要在下拉菜单中显示的内容吗?是否有命名公约将它们联系在一起? – 2013-05-14 00:44:55

+0

对于一个简单的ComboBox来说,Caliburn.Micro的默认行为对您的需求来说可能是过度的,除非您希望每个项目都使用完整的视图。如果您只需一个简单的显示字符串,您还可以设置DisplayMemberPath。至于约定,如果您有一个名为ItemViewModel的视图模型,例如位于ViewModels文件夹中,则CM将在兄弟视图文件夹中查找ItemView。 – devdigital 2013-05-14 07:40:32

相关问题