2015-04-21 3 views
0

Я пытаюсь получить изображение, отображаемое в списке combobox на основе связанного логического значения. Когда изображение нажимается на логическое значение, и, следовательно, изображение должно измениться. Вот XAML:wpf image button в списке combobox

<ComboBox Name="Combo2" Margin="20,79,20,0" ItemsSource="{Binding}" VerticalAlignment="Top" Height="20"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image Name="MyBoolImage" Height="12" Width="12" MouseLeftButtonUp="Image_MouseLeftButtonUp"/> 
        <TextBlock Text="{Binding name}" Margin="5,0,0,0" Width="100" /> 
       </StackPanel> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding LightOn}" Value="False"> 
         <Setter TargetName="MyBoolImage" Property="Source" Value="/Images/Exit.png"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding LightOn}" Value="True"> 
         <Setter TargetName="MyBoolImage" Property="Source" Value="/Images/Cut.png"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

А класс данных:

Class ComboData 

Private _LightOn As Boolean 
Public Property LightOn As Boolean 
    Get 
     Return _LightOn 
    End Get 
    Set(value As Boolean) 
     _LightOn = value 
    End Set 
End Property 

Private _name As String 
Public Property name As String 
    Get 
     Return _name 
    End Get 
    Set(value As String) 
     _name = value 
    End Set 
End Property 

Sub New(name_ As String, Light_On As Boolean) 
    _LightOn = Light_On 
    _name = name_ 
End Sub 

End Class 

загрузки некоторые тестовые данные:

Dim x As New List(Of ComboData) 

    x.Add(New ComboData("test1a", True)) 
    x.Add(New ComboData("test2a", False)) 
    x.Add(New ComboData("test3a", True)) 
    x.Add(New ComboData("test4a", True)) 
    x.Add(New ComboData("test5a", False)) 
    x.Add(New ComboData("test6a", True)) 
    Combo2.ItemsSource = x 

и, наконец, нажмите событие, где магия не происходит .. .

Private Sub Image_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) 
    Dim SelectedComboData As ComboData = TryCast(CType(sender, Image).DataContext, ComboData) 
    SelectedComboData.LightOn = Not SelectedComboData.LightOn 
    e.Handled = True 
End Sub 

Значение LightOn изменяется, как предполагается, даже в «x» (список комбодатов), значение изменяется. Но отображаемое изображение не меняется.

Что мне не хватает?

Спасибо!

+0

Я надеюсь, что вы слушаете меня уведомляют об изменениях и ComboBox привязки является правильным? – Muds

+0

вы должны реализовать интерфейс INotifyProperty Change. –

ответ

0

Класс comboData должны осуществлять INotifyPropertyChanged, чтобы уведомить UI о ее изменениях ..

Class ComboData 
    Implements INotifyPropertyChanged 

    Private _LightOn As Boolean 
    Public Property LightOn As Boolean 
     Get 
      Return _LightOn 
     End Get 
     Set(value As Boolean) 
      _LightOn = value 
      OnPropertyChanged("LightOn") 
     End Set 
    End Property 

    Private _name As String 
    Public Property name As String 
     Get 
      Return _name 
     End Get 
     Set(value As String) 
      _name = value 
      OnPropertyChanged("name") 
     End Set 
    End Property 

    Sub New(name_ As String, Light_On As Boolean) 
     _LightOn = Light_On 
     _name = name_ 
    End Sub 

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 

    Protected Sub OnPropertyChanged(propertyName As String) 
     RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) 
    End Sub 
End Class