gpt4 book ai didi

.net - 使用 IMultiValueConverter 将多个 CommandParameters 传递给 viewModel

转载 作者:行者123 更新时间:2023-12-04 06:23:23 25 4
gpt4 key购买 nike

我有以下代码:

<DataGridTemplateColumn Header="Security">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="Security" Content="{Binding Path=totalSecurities}"
Command="{Binding Source={StaticResource viewModel}, Path=filterGridCommand}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource PassThroughConverter}">
<Binding Path="sector"/>
<Binding ElementName="Security" Path="Name"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
下面是 PassThroughConverter 的代码:
public class PassThroughConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameters, CultureInfo culture)
{
return values;
}

public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
当我一碰到返回值行就进行调试时,正确的值在数组中
但是当我按下触发filtergridcommand的按钮时,返回的值都是空的?任何人都可以帮忙。谢谢你。

最佳答案

一些实验证实这样做

public object Convert(object[] values, Type targetType, 
object parameters, CultureInfo culture)
{
return values;
}

导致命令参数以 object[] { null, null } 结尾.

转换器在每次绑定(bind)值更改时运行,而不是在执行命令时运行,并且在执行命令时缓存返回值以供使用。原参数 object[] values似乎被重置为所有空值。

解决方案是克隆 values范围。在您的情况下,您可以这样做:
public object Convert(object[] values, Type targetType, 
object parameter, CultureInfo culture)
{
return new [] {values[0], values[1]};
}

更有用的是,可以像这样处理可变数量的值:
public object Convert(object[] values, Type targetType, 
object parameter, CultureInfo culture)
{
return values.ToArray();
}

关于.net - 使用 IMultiValueConverter 将多个 CommandParameters 传递给 viewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com