2010-12-22 2 views
0

FirstName과 LastName이라는 두 개의 속성이 있으며 Multibinidng 및 변환기를 사용하여 TextBlock에 바인딩되어 FullName을 FirstName + LastName으로 표시합니다.변환기에서 변경하면 바인딩 된 속성의 변경 사항이 통보됩니까?

FIRSTNAME = "키 쇼어" 성 = "쿠마"나는 키 쇼어는 텍스트 변경 "가 표시됩니다 컨버터 내 TextBlock을 실행 후"변경된 텍스트 "

values[1] = "Changed Text"; 

으로 성을 변경 컨버터에서

"하지만 성 속성 LastName에는 여전히 마지막 값"Kumar "가 있습니다. 실행 후 LastName 속성에 "Changed Text"값이 표시되지 않는 이유는 무엇입니까?

변환기에서 변경 한 내용이 바운드 속성에 통지됩니까?

<Window.Resources> 
    <local:NameConverter x:Key="NameConverter"></local:NameConverter> 
</Window.Resources> 
<Grid> 
    <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding Converter="{StaticResource NameConverter}"> 
       <Binding Path="FirstName"></Binding> 
       <Binding Path="LastName"></Binding> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
</Grid> 

변환기 :

public class NameConverter:IMultiValueConverter 
{ 
    #region IMultiValueConverter Members 

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     values[1] = "Changed Text"; 
     return values[0].ToString() + " " + values[1].ToString(); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

답변

0

변환기에서 만든 변화가 바인딩 속성을 알립니다 것이다 : 당신은 개체 자체에 바인딩 할 수 있을까?

번호 변환기는 바운드 값을 변환하는 데 사용되며 수정하지 않습니다. 종속성 속성 강제 변환이나 뷰 모델과 같은보다 적절한 위치에서이 작업을 수행해야합니다.

0

개체 []를 두 바인딩을 평가 한 후 속성 값입니다 변환 방법의 매개 변수로 얻을. 속성의 값이 배열에 복사되고 요소에 값을 할당하면 값이 생성되는 속성이 아니라 배열 만 변경됩니다.

이러한 속성이있는 원래 개체를 변경하려면 해당 클래스에 대한 일반 valueconverter를 만들고 개체 자체에 바인딩 할 수 있습니다. 같은 : 물론

public class NameConverter:IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Person p = value as Person; 
     if (p == null) { return null; } 
     p.LastName = "Changed Text"; 
     return p.FirstName + " " + p.LastName; 
    } 
// ... 
} 

, 다음 MultiBinding 필요가 없을 것이다.

<TextBlock Text="{Binding Converter={StaticResource NameConverter}}"/> 
+0

Person 속성 자체가 변경되지 않고 이름 만 변경 되었기 때문에 작동하지 않습니다. 따라서 바인딩이 새로 고쳐지지 않고 변환기가 호출되지 않습니다. –

관련 문제