2010-07-01 9 views
0

내 목록 상자는 아래에 정의되어 있습니다. "속성"은 항목 중 하나를 변경하지만 BindingList이지만 이미지 스타일은 업데이트되지 않습니다. 제가 누락 된 아이디어가 있습니까?WPF - datatrigger가 실행되지 않는 이유는 무엇입니까?

  <ListBox x:Name="lstProperties" 
        Margin="0,0,5,0" 
        ItemsSource="{Binding Properties}" 
        SelectedItem="{Binding CurrentProperty}"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="16"/> 
           <ColumnDefinition/> 
          </Grid.ColumnDefinitions> 
          <Image> 
           <Image.Style> 
            <Style TargetType="{x:Type Image}"> 
             <Setter Property="Source" Value="Images/HouseRed_16.png"/> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding SuitableApplicationCount, Converter={StaticResource greaterThanConverter}, ConverterParameter=0}" Value="True"> 
               <Setter Property="Source" Value="Images/HouseYellow_16.png"/> 
              </DataTrigger> 
              <DataTrigger Binding="{Binding InterestedApplicationCount, Converter={StaticResource greaterThanConverter}, ConverterParameter=0}" Value="True"> 
               <Setter Property="Source" Value="Images/HouseAmber_16.png"/> 
              </DataTrigger> 
              <DataTrigger Binding="{Binding MatchedApplicationId, Converter={StaticResource isNullOrEmptyConverter}}" Value="False"> 
               <Setter Property="Source" Value="Images/HouseGreen_16.png"/> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </Image.Style> 
          </Image> 
          <TextBlock Grid.Column="1" VerticalAlignment="Center"> 
           <TextBlock.Text> 
            <MultiBinding StringFormat="{}Id: {0}, Plot: {1}"> 
             <Binding Path="Id" FallbackValue="" /> 
             <Binding Path="Plot" FallbackValue=""/> 
            </MultiBinding> 
           </TextBlock.Text> 
          </TextBlock> 
         </Grid> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

답변

0

모델이 INotifyPropertyChanged를 구현하도록하십시오.
몇 가지 샘플 코드를 포함했습니다 :

public class MyModel : ViewModelBase 
{ 
    private int _suitableApplicationCount; 
    public int SuitableApplicationCount 
    { 
    get { return _suitableApplicationCount; } 
    set 
    { 
     _suitableApplicationCount = value; 
     OnPropertyChanged("SuitableApplicationCount"); 
    } 
    } 

    public int _interestedApplicationCount; 
    public int InterestedApplicationCount 
    { 
    get { return _interestedApplicationCount; } 
    set 
    { 
     _interestedApplicationCount = value; 
     OnPropertyChanged("InterestedApplicationCount"); 
    } 
    } 

    public int? _matchedApplicationId; 
    public int? MatchedApplicationId 
    { 
    get { return _matchedApplicationId; } 
    set 
    { 
     _matchedApplicationId = value; 
     OnPropertyChanged("MatchedApplicationId"); 
    } 
    } 
} 

public abstract class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
    PropertyChangedEventHandler handler = PropertyChanged; 

    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    } 
} 
관련 문제