2
<Button Margin="222,256,130,19" Content="Add" Command="{Binding AddCustomer}">
   <Button.CommandParameter>
      <MultiBinding Converter="{StaticResource MyMultiConverter}">
         <Binding ElementName="Name" Path="Text"></Binding>
         <Binding ElementName="ID" Path="Text"></Binding>
      </MultiBinding>
   </Button.CommandParameter>
</Button>
public class MultiConverter : IMultiValueConverter
{
   public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
   {
      return values;
   }

   // ...
}

我已经在我的类中实现了IMultiValueConverter接口并实现了方法Convert,但是

当我的按钮命令执行方法“AddCustomer”时,它会导致命令参数以object[] { null, null } 结尾。

我还没有找到解释为什么我必须把return values.Clone(); 为了解决这个问题

4

1 回答 1

2

绑定返回 null (正如您在我编辑之前声称的标题)还是返回一个二元素数组{ null, null }(如您的帖子声称的那样)?前者似乎不太可能。如果个别绑定不正确,则可能发生后者。

但是,会发生的另一件事是,如果您实际上是在返回values数组,那不是您拥有的数组,也不是您可以依赖的数组。作为一种优化,WPF 每次调用转换器时都会重用相同的数组,并且在转换器返回后清除数组的元素。

克隆阵列修复问题与此行为一致。答案很简单:不要尝试使用那个数组;这不是你的。如果您想要逐字记录所有值,则必须复制到一个新数组,就像您现在所做的那样。

于 2020-11-02T04:22:44.630 回答