2012-01-14 4 views
1

저는 첫 번째 Windows Phone 7 App에서 작업 중이며 텍스트 상자의 바인딩이 작동하지 않아서 그 이유를 알 수 없다는 문제가 있습니다. 다른 바인딩은 완벽하게 작동합니다.Windows Phone App 텍스트 상자 바인딩이 작동하지 않습니다.

날짜가 변경되면 텍스트 상자의 텍스트도 변경되어야합니다.

XAML :

<TextBlock x:Name="ZodiacText" Text="{Binding Path=ZodiacString, Mode=OneWay}" FontSize="20" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" /> 

그리고 뒤에있는 코드 : ZodiacString이 당신은 어쨌든 기본입니다 Mode=OneWay을 가지고

  • 을 설정 한 경우

    public DateTime Date 
    { 
        get { return date; } 
        set 
        { 
         if (value != this.date) 
         { 
          this.date = value; 
          setActualDate(this.date); 
    
          update(); 
    
          if (this.PropertyChanged != null) 
          { 
           this.PropertyChanged(this, 
           new PropertyChangedEventArgs("NewDate")); 
          } 
         } 
        } 
    } 
    public void update() 
    { 
        zodiac = MoonCalculus.getZodiac(); 
        ... 
        ZodiacString = zodiac; 
    } 
    public String ZodiacString 
    { 
        get { return zodiacString; } 
        set 
        { 
         if (zodiacString != value) 
         { 
          zodiacString = AppResources.ResourceManager.GetString(value); 
         } 
        } 
    } 
    
  • +0

    OnNavigatedTo 코드를 게시 할 수 있습니까? 이제는 동일한 문제가 발생했을 것으로 생각됩니다. – 000

    답변

    1

    update()을 제거하고 ZodiacString에 대한 설정기를 없앱니다.

    두 가지 이유가 필요하지 않습니다. getter에서 업데이트 작업을 수행하십시오. 이것은 현재의 구현보다 우수합니다. AppResources.ResourceManager.GetString(value);에 대한 매개 변수로 사용되는 값은 true 의도를 분명히하지 않기 때문에 'code smell'입니다. (ZodiacString을 값으로 설정하지 않고 매개 변수로 사용)

    public DateTime Date 
    { 
        get { return date; } 
        set 
        { 
         if (value != this.date) 
         { 
          this.date = value; 
          setActualDate(this.date); 
    RaisePropertyChanged("Date"); 
    RaisePropertyChanged("NewDate"); 
    RaisePropertyChanged("ZodiacString"); 
    
         } 
        } 
    } 
    
    
    private void RaisePropertyChanged(string propertyName) 
    { 
    if (this.PropertyChanged != null) 
          { 
           this.PropertyChanged(this, 
           new PropertyChangedEventArgs(propertyName)); 
          } 
    } 
    
    public String ZodiacString 
    { 
        get { 
    zodiac = MoonCalculus.getZodiac(); 
        ... 
    return zodiac; } 
    } 
    
    +0

    도움이되었다. 이제 작동합니다. 최고 감사합니다! – user1074404

    2
    1. 당신은 PropertyChanged을 제기 아닙니다. Mode=TwoWay을 원합니다.
    +0

    PropertyChanged를 올리면 작동하지 않습니다. 바인딩을 사용하여 Button의 ImageSource를 변경하지 않고 동적으로 변경합니다. 나는 Mode = OneWay를 원한다. 변화는 모델에서 UI로만 만들어진다. – user1074404

    관련 문제