2017-06-22 41 views
0

我有問題,我需要設置差異顏色Expander爲什麼要擴展綁定差異datacontext的Gruoping DataGrid/ListView?

Expander分組爲ListView,有時候,組很好是空的。

現在,我有兩個類來設置組和項目。只要參考這個「https://www.codeproject.com/Articles/33986/Empty-groups-in-WPF-ListView

而且,我的班級添加一個屬性StatusColor並綁定它。

class Cluster 
{ 
    private SolidColorBrush _statusColor; 
    public SolidColorBrush StatusColor 
    { 
     get { return _statusColor; } 
     set { SetProperty(ref _statusColor, value); } 
    } 
    public string Name { get; set; } 
} 

所以,ExpanderHeader在XAML像:

<Expander.Header> 
     <TextBlock Text="{Binding Name}" Foreground="{Binding Items[0].Cluster.StatusColor}"/> 
</Expander.Header> 

它的工作表時,沒有任何空組。但是如果空組,Items[0]將爲空。所以我想綁定StatusColor,它沒有綁定Items[0].Cluster.StatusColor

爲什麼Text可以綁定NameCluster,但Foreground不能?

回答

0

我自己解決了這個問題。

實際上,問題在於對羣組設置的依賴。

通常,我按照Cluster的名稱分組,實際上,它總是需要按Cluster的對象分組。

所以,當我設置PropertyGroupDescription

PropertyGroupDescription group = new PropertyGroupDescription("Cluster.Name"); 
group.GroupNames.Add(cluster.Name); 

它使用string分組這些數據。然後Binding NameName意味着stringCluster.Name,而不是Clusterobject

但是,Binding Items[0].Cluster.Property意味着某人組的項目。然後,它是object,與Namestring不同。

因此,我修改組設置。

PropertyGroupDescription group = new PropertyGroupDescription("Cluster"); 
group.GroupNames.Add(cluster); 

這是真的,由Clusterobject分組。但XAML將是:

<TextBlock Text="{Binding Name.Name}" Foreground="{Binding Name.StatusColor,FallbackValue=Green}"/> 

現在,Name指的Clusterobject,所以Text綁定Name.Name,第二NameCluster財產,我可以用Name.StatusColor綁定Foreground

0

Text屬性綁定到得到由WPF創建和被設置爲一個GroupItemDataContextSystem.Windows.Data.CollectionViewGroup對象的Name屬性。

StatusColor是每個組中您的自定義Cluster對象的屬性。巨大差距。顯然,如果組中沒有項目,則無法綁定到此屬性,因爲那樣就沒有任何內容綁定到該屬性。

您的羣組沒有StatusColor,但是您的Cluster項具有。

你可以做的是使用BindingFallbackValue屬性來指定Foreground使用當組爲空:

<Expander.Header> 
    <TextBlock Text="{Binding Name}" Foreground="{Binding Items[0].Cluster.StatusColor,FallbackValue=Green}"/> 
</Expander.Header> 

應該清楚,一個人Cluster對象不能確定的顏色一個空的組雖然。

+0

謝謝你的回答。我自己解決了這個問題。 –