2014-03-12 86 views
0

當我的數據網格從數據庫加載時,試圖綁定複選框的屬性IsChecked。 在我的數據庫中,我有這張表包含一個接收位字段的列。從DataGrid中的數據庫綁定複選框的IsChecked屬性

所以當datagrid被加載時,我必須驗證我的列字段是true還是false。 如果它是真的,我想將複選框的IsChecked屬性設置爲true。

我試過下面的代碼,但它沒有工作。

這裏是我的XAML代碼:

<Classes:SetIsChecked x:Key="itemChecked" /> 

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox Name="ItemMarcado" Checked="ItemMarcado_Checked" 
      IsChecked="{Binding Source={StaticResource itemChecked}, Path=Convert Mode=TwoWay, 
      ConverterParameter=MARCADO, UpdateSourceTrigger=PropertyChanged }"> 
     </CheckBox> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

我的C#代碼:

類SetIsChecked:的IValueConverter {

public static bool IsChecked { get; set; } 

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 

    Item item = (Item)value; 
    string tipoIcon = (string)parameter; 

     try 
     {     
      if ((item.ItemMarcado == true) && (tipoIcon == "MARCADO")) 
      { 
       IsChecked = true; 
       return IsChecked; 
      } 

      IsChecked = false; 
      return IsChecked; 
     } 
     catch 
     { 
      IsChecked = false; 
      return IsChecked; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

回答

0

該綁定有這麼多錯誤:

  1. 您正在將源設置爲轉換器。轉換器進入「Converter」屬性。
  2. 您正在設置轉換器對象上函數的路徑。路徑應該是位域屬性。
  3. 您正確使用ConverterParameter,但沒有設置Converter屬性,這不會做一件事情。
  4. 您有一個複選框上的PropertyChanged更新觸發器,它永遠不會失去焦點,所以當用戶點擊時它總是會改變!它不會傷害你,但你不應該需要它。

話雖這麼說,你的綁定應該僅僅是:

IsChecked="{Binding Path=ItemMarcado}" 

你可以檢查打擊「MARCADO」字符串轉換器,但你有它總是有一個字符串反正結合,所以額外的複雜性是不值得的。

請讓我知道,如果我能澄清任何事情或以任何其他方式幫助!

相關問題