转换器中的更改将通知绑定属性的更改?

我有两个属性FirstName和LastName,并使用Multibinidng和converter绑定到一个文本块,以将FullName显示为FirstName + Last Name。 名字=“阿迪”    姓氏=“库玛” 在转换器中,我将LastName更改为“已更改的文本”
values[1] = "Changed Text";
执行转换器后,我的TextBlock将显示“Kishore Changed Text”,但Dependency属性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
}
    
已邀请:
  转换器的更改是否会通知绑定的属性? 编号转换器用于转换绑定值 - 而不是修改它们。您应该在更合适的位置执行此操作,例如依赖项属性强制或视图模型。     
在Convert方法中作为参数获得的object []是在评估两个绑定之后的属性值。已将属性的值复制到数组中,并通过为元素指定值,只更改数组,而不是更改值的属性。 如果要更改具有这些属性的原始对象,可以为该类创建一个普通的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}}"/>
    

要回复问题请先登录注册