2016-04-20 67 views
0

我在我的應用程序如下觀點:WPF的組合框複選框檢查,以不同的源大於內容(MVVM)

<ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="87,53,0,0" VerticalAlignment="Top" Width="182" ItemsSource="{Binding Clients}" DisplayMemberPath="Email" SelectedItem="{Binding SelectedClient}"/> 
    <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="100" Margin="87,98,0,0" VerticalAlignment="Top" Width="182" ItemsSource="{Binding Countries}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Name}" Checked=""/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

兩個的ItemSource綁定綁定到以下類型的兩個列表:

國家類:

public class Country 
    { 
     public Guid Guid { get; set; } = Guid.NewGuid(); 
     public string Name { get; set; } 

     public Country(string name) 
     { 
      Name = name; 
     } 
    } 

客戶也是我的ViewModel另一個列表

public class Client 
    { 
     public Guid Guid { get; set; } = Guid.NewGuid(); 
     public string Prename { get; set; } 
     public string Lastname { get; set; } 
     public string Email { get; set; } 
     public List<Country> Countries { get; set; } = new List<Country>(); 
     public List<AreaType> Areas { get; set; } = new List<AreaType>(); 

     public Client() { } 
     public Client(string prename, string lastname, string email, List<Country> countires = null, List<AreaType> areas = null) 
     { 
      Prename = prename; 
      Lastname = lastname; 
      Email = email; 
      Countries = countries; 
      Areas = areas; 
     } 
    } 

我的問題:我試圖找到一種方法來檢查視圖中的複選框,如果客戶端在複選框顯示的列表中具有相同的國家/地區。

實施例:View顯示從ViewModel.Countries「瑞士」,「德國」和「奧地利」和ViewModel.SelectedClient.Countries contrains「瑞士」和「奧地利」國家然後只有這兩個應該在view檢查。

+0

也許你可以添加布爾到國家「選定」。在創建客戶時,請將您國家/地區列表中可用的國家/地區設置爲selected = true。然後在xaml中,您可以將Selected字段綁定到您的複選框。 –

+0

@JeroenDop這將工作我猜雖然我不認爲它是一個非常好的想法,添加一個屬性的模型只是爲了能夠檢查一些複選框,因爲這不是國家類的唯一用法。 Imo可能用與國家本身無關的數據「損壞」模型 – VIP

+0

確實,您可以添加具有添加屬性的ViewModel ClientCountry。將ClientCountry添加到客戶端的國家/地區列表中。 –

回答

0
public class Country 
     { 
      public Guid Guid { get; set; } = Guid.NewGuid(); 
      public string Name { get; set; } 
      public bool Selected{get;set;} 
      public Country(string name) 
      { 
       Name = name; 
      } 
     } 

      <DataTemplate> 
        <CheckBox Content="{Binding Name}" Checked="{Binding Selected}"/> 
      </DataTemplate>