2013-01-03 90 views
0

我有一個列表視圖,通過數據模式顯示行。當我選擇一個項目時,我將所選項目添加到可觀察集合中,並將「CarIsSelected」的值設置爲true,以便知道選擇了哪個項目。我在設置添加到observablecollection的項目的背景顏色時遇到了問題?我希望這是有道理的。以下是我迄今爲止的代碼。舉另一個例子,如果我選擇「item1」,我將「item1」添加到集合中並突出顯示「item1」的行。然後選擇「item2」,將「item2」添加到集合中,並突出顯示「item2」的行。因此應該突出顯示「item1」和「item2」。爲列表視圖中的選定項目設置背景

XAML:

<ListView Name="lstExistingProblemList" HorizontalAlignment="Left" VerticalAlignment="Bottom" 
      ItemsSource="{Binding Path=ListOfCars}" SelectedItem="{Binding SelectedCar}" 
      SelectionMode="Single" Width="391" Grid.ColumnSpan="2"> 

    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Label Width="391" Margin="0,0,5,0" HorizontalAlignment="Left"> 
       <Label.Content> 
        <TextBlock> 
         <TextBlock.Text> 
          <MultiBinding StringFormat="{}{0}-{1}"> 
           <Binding Path="Make" /> 
           <Binding Path="Model" /> 
          </MultiBinding> 
         </TextBlock.Text> 
        </TextBlock> 
       </Label.Content> 
      </Label> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

視圖模型:

ObservableCollection<CarsInfo> selectedCarsLists = new ObservableCollection<CarsInfo>(); 
List<CarsInfo> listOfCars = new List<CarsInfo>(); 
CarsInfo selectedCar; 

public List<CarsInfo> ListOfCars 
{ 
    get 
    {  
     listOfCars = DataSource.GetCarInfo(); 
     return listOfCars; 
    } 
} 

public ObservableCollection<CarsInfo> SelectedCarsLists 
{ 
    get 
    { 
     return selectedCarsLists; 
    } 
} 

public CarsInfo SelectedCar 
{ 
    get 
    { 
     return selectedCar; 
    } 
    set 
    { 
     if (selectedCar != value) 
     { 
      selectedCar = value; 
      selectedCar.CarIsSelected = true; 
      selectedCarsLists.Add(selectedCar); 
     } 
    } 
} 

類:

public int Year { get; set; } 
public string Description { get; set; } 
public string Make { get; set; } 
public string Model { get; set; } 
public bool CarIsSelected { get; set; } 
+0

看看http://stackoverflow.com/questions/6171502/change- background-color-of-listview-row-programmatically-wpf Gishu的回答。創建一個屬性或函數,基於IsSelected進行切換以綁定爲顏色。 – JDwyer

+0

你應該使用顏色轉換器來選擇項目的顏色變化 –

回答

0

你可以設置一個DataTriggerCarIsSelected財產,但你必須在實施INotifyPropertyChangedCarsInfo用於UI的類以反映這些變化。

XAML:

<ListView.ItemTemplate> 
     <DataTemplate> 
      <Label x:Name="label" Width="391" Margin="0,0,5,0" HorizontalAlignment="Left"> 
       <Label.Content> 
        <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="{}{0}-{1}"> 
          <Binding Path="Make" /> 
          <Binding Path="Model" /> 
         </MultiBinding> 
        </TextBlock.Text> 
        </TextBlock> 
       </Label.Content> 
      </Label> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding CarIsSelected }" Value="True" > 
        <Setter TargetName="label" Property="Background" Value="Red" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

代碼

public class CarsInfo : INotifyPropertyChanged 
{ 
    public int Year { get; set; } 
    public string Description { get; set; } 
    public string Make { get; set; } 
    public string Model { get; set; } 

    private bool _carIsSelected; 
    public bool CarIsSelected 
    { 
     get { return _carIsSelected; } 
     set { _carIsSelected = value; NotifyPropertyChanged("CarIsSelected"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

結果: enter image description here

+0

哦,我的上帝。我一直在這裏喋喋不休幾個小時,並且你建議的工作。我在「listviewitem」本身而不是標籤上做了一個數據觸發器。你的建議有意義。再次感謝你。 – user1884032

相關問題