2011-03-03 60 views
2

在我的ViewModel类中,我有一个静态属性AllSupport,但我无法弄清楚如何正确绑定它。 ListView已被绑定到具有AllSupport静态属性的ObservableCollection AllEffects如何将数据绑定到非静态类的静态属性?

我用这个:

<GridViewColumn 
    Width="Auto" 
    Header="GPU"> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox 
       Margin="0" 
       HorizontalAlignment="Center" 
       IsChecked="{Binding AllSupport[HardwareType].SupportList.IsSupported, Mode=TwoWay}"/> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

AllEffectsEffectViewModel其中它有一个称为AllSupport静态属性是类型的ObservableCollectionDictionary<HardwareType, List<EffectSupport>>其中:

HardwareType是枚举和 EffectSupport是一个名为IsSupported的布尔属性的实例类。

我也试过,但然后抱怨说,它不能在ViewModel类找到IsSupported

IsChecked="{Binding AllSupport[HardwareType].SupportList, Path=IsSupported 

任何想法,如何指定这个绑定?

+0

你想绑定哪个静态属性?从你的问题,我明白你想要绑定的属性是'IsSupported',但从你的描述看来,它似乎是'EffectSupport'类的常规属性。 – madd0 2011-03-03 21:36:50

+0

谢谢你是对的,我忽略了我想的一个小细节。将编辑但IsSupported是ViewModel类中静态属性的实例属性。 – 2011-03-03 21:39:25

+0

所以目前我的代码返回一个List,我该如何指定在xaml中获取其中的每个项目? – 2011-03-03 22:10:39

回答

2

您可以使用x:Static该类是否为静态或非静态成员。

未经测试:

IsChecked="{Binding [HardwareType], Source={x:Static prefix:EffectViewModel.AllSupport}}" 

,你需要一个prefix访问您的视图模型的命名空间。

+0

感谢您的回复。所以ViewModel的属性是静态的,但实际的最后一个绑定属性是一个实例。在你的例子中,你没有指定IsSupported,你知道如何使用它吗?因为这是从AllSupport [HardwareType] .SupportList获取的实际EffectSupport实例的属性。 – 2011-03-03 22:20:16

+1

我只注意到这个遗漏,并正在看它。也许只需将路径更改为[HardwareType] .IsSupported。仍未测试! – 2011-03-03 22:22:50

+0

我仍然得到同样的错误,它抱怨IsSupported不是列表上属于[HardwareType]返回的属性。我做了[HardwareType] .IsSupported,因为我不知道还有什么地方可以访问它。 – 2011-03-03 22:25:22

0

这是我的情况:

  • 有一个非静态类的静态属性,它是一个的ObservableCollection
  • 类作为一个记录器,并从程序收集特定例外

问题陈述:

  • 我如何非静态类的静态成员结合列表视图中的XAML

我的解决方案:

后面的代码(Window.cs):

public ObservableCollection<T> FooList {get {return FooLogger.ExceptionList;}} 
//where FooLogger is a non-static class 
//and ExceptionList is a static ObservableCollection<T> 

的DataContext(Window.cs):

this.DataContext=this; 

XAML(窗口.xaml)

<ListView ItemsSource="{Binding FooList}"> 
        <ListView.View> 
         <GridView> 
          <GridViewColumn Width="Auto" Header="Name" DisplayMemberBinding="{Binding Name}" /> 

干杯, v0k