IMul​​tiValueConverter的参数总是一样的?

时间:2011-08-25 12:34:06

标签: c# wpf imultivalueconverter

我有一个继承自IMultiValueConverter的简单转换器,它接收2个参数(在values数组中)。

public class TicketNoConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var dataContext = values[0] as ViewModel;
        var data = values[1] as String;
    }
}

我知道我的转换器是单例,但尽管ViewModel包含不同的数据,但我的转换器始终收到相同的ViewModel实例(第一个绑定参数)和相同的Remarks文本。

使用此XAML,Remarks会正确显示正确的值。

<TextBlock
    Grid.Column="1"
    Style="{StaticResource EditorValueStyle}"
    Text="{Binding ViewModel.Remarks}" />

但是,如果我将Remarks作为绑定参数传递,那么它将使用与从加载的第一个项目传递的第一个ViewModel相同的参数值。这就是XAML的样子:

   <ContentControl Grid.Column="1">
        <ContentControl.Content>
            <MultiBinding Converter="{StaticResource TicketNo}">
                <Binding Path="" />
                <Binding Path="ViewModel.Remarks" />
            </MultiBinding>
        </ContentControl.Content>
    </ContentControl>

这是我用来注册转换器的XAML:

<local:TicketNoConverter x:Key="TicketNo" />

深入研究这个问题,传递给MultiBinding的2个参数总是来自之前 ViewModel的2个值。

如何确保使用ViewModel的当前实例?

1 个答案:

答案 0 :(得分:2)

设置绑定后,我不相信它们会刷新,除非您的数据上下文发生变化。视图的数据上下文是设置为视图模型还是设置为自身?如果未将其设置为视图模型 - 则必须强制修改绑定。

更改视图模型时是否会触发INotify事件?