我有一个继承自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
的当前实例?
答案 0 :(得分:2)
设置绑定后,我不相信它们会刷新,除非您的数据上下文发生变化。视图的数据上下文是设置为视图模型还是设置为自身?如果未将其设置为视图模型 - 则必须强制修改绑定。
更改视图模型时是否会触发INotify事件?