2011-03-03 92 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