2013-10-30 16 views
0

我正在創建一個帶有多個GridViewColumn的WPF ListView,並且希望基於綁定和該數據值是否爲空或非空來將CheckBoxIsChecked屬性設置爲true或false。當值爲空或不爲空時,如何在列表視圖中檢查複選框?

我試過使用下面的DataTrigger來實現這一點,但它似乎並沒有工作。它基本上保持在ListView未檢查的一切。

<GridViewColumn Header="W()" Width="20" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox Content="Tell me something" > 
       <CheckBox.Style> 
        <Style TargetType="{x:Type CheckBox}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding WebsiteJob}" Value="{x:Null}"> 
           <Setter Property="IsChecked" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </CheckBox.Style> 
      </CheckBox> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn> 

有沒有辦法,我根據他們的結合處理與GridViewColumn一個ListView特定的列?真正在這種情況下,我想爲CheckBox提供一些自定義內容,並將其設置爲IsChecked。我對WPF來說很新,所以很簡單。

+0

可能是更容易使用的轉換器,而不是或數據觸發。 –

+1

@mattburland,或者更容易在ViewModel級別處理此操作,並返回UI可以直接理解或顯示的重要屬性值。 –

+0

轉換器做它的一部分。雖然ConvertBack方法有問題。我需要以某種方式將該原始對象值存儲在檢查中。 – meanbunny

回答

0

好的,這裏是我根據問題評論中的建議所做的。我創建了一個存儲原始對象的IValueConverter。這允許我對嵌套對象本身執行各種驗證,然後在完成時將其設置回來。

public class CheckboxIsCheckedValueConverter : IValueConverter { 

    public object OriginalValue; 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     if (value != null) { 
      OriginalValue = value; 
      return true; 
     } 
     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     if ((bool)value == true) { 
      return OriginalValue; 
     } else { 
      return null; 
     } 
    } 
} 

此外,我不得不將xaml導入更改爲以下內容。即使x:Shared在Intellisense中未彈出,它仍然存在。這確保轉換器的每個實例都是唯一的,並允許我存儲原始值。

<l:CheckboxIsCheckedValueConverter x:Key="CheckboxIsCheckedValueConverter" x:Shared="False" /> 

改性GridViewColumn

<GridViewColumn HeaderContainerStyle="{StaticResource SmokeStyleHeaders}" Header="W()" Width="30" > 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox Foreground="White" Checked="CheckBox_Checked" IsChecked="{Binding WebsiteJob, Converter={StaticResource CheckboxIsCheckedValueConverter}}" Content="{Binding WebsiteJob, Converter={StaticResource WebsiteJobValueConverter}}" /> 
     </DataTemplate> 
    </GridViewColumn.CellTemplate> 
</GridViewColumn>