Dot-Net
使用 IMultiValueConverter 將多個 CommandParameters 傳遞給 viewModel
我有以下程式碼:
<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(); } }當我一碰到返回值行進行調試時,正確的值在數組中,但是當我按下觸發 filtergrid 命令的按鈕時,返回的值都是空的?任何人都可以幫忙。謝謝你。
一些實驗證實這樣做
public object Convert(object[] values, Type targetType, object parameters, CultureInfo culture) { return values; }導致命令參數以
object[] { null, null }.轉換器在每次綁定值更改時執行,而不是在執行命令時執行,並且在執行命令時記憶體返回值以供使用。原始參數
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(); }