2011-04-27 83 views
1

上下文:一個C#4.0 WPF應用程序,帶有一個具有一個TemplateColumn的數據網格,顯示進度條。如何有條件地隱藏WPF DataGrid的TemplateColumn中的元素?

如何才能讓網格根據條件僅顯示某些項目的進度條?

也許聽事件和隱藏細胞/設置visibile爲false將是一個選項。

這是它的外觀現在(將顯示所有項目的進度條):

<UserControl.Resources> 
    <DataTemplate x:Key="PotentialDataTemplate"> 
     <Grid Width="70"> 
      <ProgressBar 
       Height="12" 
       VerticalAlignment="Center" 
       Value="{Binding Path=Potential, Mode=OneWay}" /> 
     </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

<DataGrid x:Name="dataGrid" 
     ItemsSource="{Binding Path=Items}" 
     AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn 
      Header="{Binding Source={x:Static text:TextBindingProvider.Instance}, Path=CompendiumHeaderPotential}" 
      Width="Auto" 
      MinWidth="80" 
      CellTemplate="{StaticResource PotentialDataTemplate}" 
      IsReadOnly="true" 
      SortMemberPath="Potential" /> 
    </DataGrid.Columns> 
</DataGrid> 

回答

2

你根據什麼條件能見度幾個選項。如果您有一個單獨的屬性,如「IsPotentialVisible」,那麼可以使用BooleanToVisibilityConverter將其綁定到進度條的Visibility屬性。

接下來,如果它是一個簡單的條件,如「隱藏當潛在== 0」,那麼你可以創建一個DataTrigger來處理這種情況。

否則,您還可以創建一個自定義轉換器,根據所需的任何輸入屬性/參數來提供可見性。

+0

謝謝你給我的那些其他的選擇!現在我實現了自己的屬性,但我也會查看DataTriggers。你究竟是什麼意思與轉換器?是我可以查找的WPF概念嗎? – Cilvic 2011-04-27 15:25:18

+1

嘿,WPF中的綁定允許您指定一個轉換器,它是從IValueConverter接口傳遞的類:http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx它允許複雜的綁定和許多其他有用的轉換。 – 2011-04-27 15:36:14

2

剛剛找到答案,我只是添加Visibility屬性並將其綁定到ViewModel中的某些條件邏輯。

Visibility = "{Binding Path=ShowPotentialBar, Mode=OneWay} 

所以:

<Grid Width="70"> 
     <ProgressBar 
      Height="12" 
      VerticalAlignment="Center" 
      Value="{Binding Path=Potential, Mode=OneWay}" 

      Visibility = "{Binding Path=ShowPotentialBar, Mode=OneWay}" /> 

    </Grid> 
+0

除非ShowPotentialBar屬性是可見性枚舉類型,否則沒有BooleanToVisibilityConverter就無法運行。 – 2011-04-27 15:49:09

+0

實際上,它與字符串返回類型一起工作,返回「隱藏」,「可見」或「可怕」 – Cilvic 2011-04-27 18:25:52

+0

在這種情況下,默認綁定轉換器將字符串轉換爲枚舉等價物 - 我不認爲很多人會說是良好的做法。 – 2011-04-28 14:03:18