2

我有一个简单的转换器继承自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" />

深入研究这个问题,传递给的 2 个参数MultiBinding始终是之前 ViewModel加载的 2 个值。

如何确保使用当前实例ViewModel

4

1 回答 1

2

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

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

于 2011-08-25T17:09:01.370 回答