2012-04-05 55 views
0

所以我只想製作一個簡單的組合框,它有2個值,true和false。捕獲是我想要綁定的項目應該接收「1」爲真,「0」接收爲假。如果可能的話,我試圖用純xaml來完成(轉換器可以接受,但我因此無法使其工作)。這裏是我的代碼...WPF中的靜態組合框的簡單值/索引

  <ComboBox SelectedItem="{Binding Criteria,Converter={StaticResource BoolToIntConverter}}"> 
       <ComboBox.Items> 
        <ComboBoxItem Name="True" Content="True" /> 
        <ComboBoxItem Name="False" Content="False" /> 
       </ComboBox.Items> 
      </ComboBox> 

轉換器看起來就像這樣......

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     ComboBoxItem cbo = new ComboBoxItem(); 

     if (value.ToString() == "1") 
      cbo.Name = "True"; 
     else 
      cbo.Name = "False"; 
     return cbo; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value.ToString().Contains("True")) 
      return 1; 
     return 0; 
    } 

它工作在這個意義上,如果我選擇真正的「1」的設置是否正確,反之亦然,但如果該屬性被代碼中的另一個位置更改爲1或0,則還需要將當前項目設置爲True/False。 Inotifyproperty已更改在綁定的字符串上正確設置,我可以中斷被調用的隱藏點,但該項不會更改。是否有一種簡單的方法在純xaml中使用組合框創建值/索引關係(我不希望使用後備對象來實現此目的)。如果沒有,是否有辦法糾正我的轉換器以獲得我正在尋找的行爲?

+0

通過避免使用MVVM,您正在對自己變得更加困難,因爲這種模式被剪掉了。 – KodeKreachor 2012-04-05 22:11:36

+0

我只是覺得使用MVVM只是爲了確保True意味着1和false意味着0有點矯枉過正,但如果我必須我想我會的。 – 2012-04-06 13:32:00

回答

1

可以在複選框上應用控件模板,使其顯示爲組合框。如何在XAML中完成此操作的示例如下:

<CheckBox Content="Select" Width="100" Height="22"> 
     <CheckBox.Style> 
      <Style TargetType="{x:Type CheckBox}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <ComboBox> 
           <ComboBoxItem x:Name="TrueComboBoxItem" Content="True" IsSelected="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=CheckBox}, UpdateSourceTrigger=PropertyChanged}" /> 
           <ComboBoxItem x:Name="FalseComboBoxItem" Content="False" /> 

          </ComboBox> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style>      
     </CheckBox.Style> 
    </CheckBox> 

我已在Snoop中驗證過此功能。

Snoop