2014-07-06 160 views
1

我已經創建了一個自定義的wpf控件 - 實質上是一個帶有複選框的combox。 combox全部成功綁定到項目列表。在複選框中設置複選框來檢查wpf

這是我的xaml代碼。

<ComboBox Height="28" HorizontalAlignment="Left" Margin="106,7,0,0" Name="comboBox1" VerticalAlignment="Top" Width="174" ItemsSource="{Binding Names}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <CheckBox Name="ckabc" Content="{Binding}" CommandParameter="{Binding}"/> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 

我的代碼是在這裏這樣的:

private List<string> names; 
public List<string> Names 
    { 
     get { return names; } 
     set 
     { 
      names = value; 
      this.OnPropertyChanged(new PropertyChangedEventArgs("Names")); 
     } 
    } 
Names = new List<string> { "Sensor Not Connected", "Poor Signal Quality", "Excessive Light", "PreAmp Not Connected", "Replace Sensor", "Interference Detected", "Sensor Unusable", "Sensor Change" }; 
     this.OnPropertyChanged(new PropertyChangedEventArgs("Names")); 

我創建屬性各列表項:其他列表項

public string SensorNotConnected 
    { 
     get 
     { 
      return Names.ElementAt(0); 
     } 
     set 
     { 
      this.emuObj.SensorNotConnected(Convert.ToBoolean(value), channelIndex); 
     } 
    } 

創建方式相同屬性。 我的想法是綁定複選框的Ischecked屬性並迭代。 但我該怎麼做。用戶可以選擇一個複選框或多個複選框。 請爲此提供一些答案。

P.S:我正在使用MVVM模型。

回答

1

下面是如何解決這個問題的簡單演示。該解決方案使用Mvvm Light,但這不是必需的。您可以創建一個類(本例中爲「Name」),而不僅僅是一個List<string>,它具有可綁定到的bool IsChecked屬性。請參閱行<CheckBox Grid.Column="1" Name="ckabc" IsChecked="{Binding IsChecked}"/>,這是我們綁定IsChecked屬性的位置。

<Window x:Class="CustomControlWpf.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    DataContext="{Binding Source={StaticResource Locator}, Path=Main}"> 
<Grid> 
    <ComboBox Height="28" HorizontalAlignment="Left" Margin="106,7,0,0" VerticalAlignment="Top" Width="174" ItemsSource="{Binding Names}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions> 
        <TextBlock Text="{Binding Description}"></TextBlock> 
        <CheckBox Grid.Column="1" Name="ckabc" IsChecked="{Binding IsChecked}"/> 
       </Grid> 

      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 
</Grid> 

public class Name 
{ 
    public string Description { get; set; } 
    public bool IsChecked { get; set; } 
} 

}

視圖模型:

public class MainViewModel : ViewModelBase 
{ 
    /// <summary> 
    /// Initializes a new instance of the MainViewModel class. 
    /// </summary> 
    public MainViewModel() 
    { 
     Names = new List<Name>() { new Name { Description = "Name1", IsChecked = false }, new Name { Description = "Name2", IsChecked = false } }; 
    } 

    private List<Name> _names; 

    public List<Name> Names 
    { 
     get { return _names; } 
     set 
     { 
      _names = value; 
      RaisePropertyChanged(() => Names); 
     } 
    } 


} 
+0

「名1」 屬於財產SensorNotConnected等等,或者你的意思是別的東西ANS物業SensorNotConnected是屬於類MAINVIEW僅型號。 – user2932395

+0

我們在這裏需要一個文本塊,因爲我相信文本將與組合框一起出現 – user2932395

+0

而不是一個單獨的TextBlock只是綁定到複選框的內容 – Paparazzi