multivalueconverter的参数总是相同的

本文关键字:参数 multivalueconverter | 更新日期: 2023-09-27 18:06:33

我有一个从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的两个参数总是来自先前加载的 ViewModel的两个值。

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

multivalueconverter的参数总是相同的

一旦你设置绑定,我不相信他们刷新,除非你的数据上下文改变。视图的数据上下文是设置为视图模型还是设置为其本身?如果没有设置为视图模型,则必须强制刷新绑定。

当视图模型被更改时,是否有一个INotify事件被触发?