2011-04-11 39 views
1

我使用以下從datagrid中獲取selecteditems,它工作正常。multibinding datagrid selecteditems不工作

<Button Command="{Binding DeleteDataCommand}" 
     CommandParameter="{Binding ElementName=MyGridCtrl, Path=SelectedItems}"/> 

現在我有一個命令,需要2個數據網格中的選定項目的2個列表。於是,我嘗試了以下multibinding:

<Button.CommandParameter> 
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}"> 
     <Binding ElementName="grdDruckVersand" Path="SelectedItems"/> 
     <Binding ElementName="grdAusgabe" Path="SelectedItems"/> 
    </MultiBinding> 
</Button.CommandParameter> 

converter.Convert()方法被稱爲初始化一次,但CommandParameter始終爲空。也許我失去了一些東西......

編輯:grdDruckVersand和grdAusgabe是DataGrid中

<DataGrid x:Name="grdDruckVersand " ... 
<DataGrid x:Name="grdAusgabe " ... 

轉換器:

public class MultiValueConverter : IMultiValueConverter 
{ 

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


    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 
+0

什麼是'grdDruckVersand'和'grdAusgabe'?你應該發佈你的轉換器的代碼。 – David 2011-04-11 12:33:35

+0

轉換器添加 – blindmeis 2011-04-11 13:05:21

+0

附註:在C#代碼和xaml代碼之間放置一些文本,以便將代碼演示者分成兩部分,並且對每種語言都有正確的顏色 – David 2011-04-11 13:07:47

回答

2

好,從轉換器的代碼,這可以肯定是不行的。

你不能簡單地寫return Values;,你需要多做一點。

我這個去:

public class MultiValueConverter : IMultiValueConverter 
{ 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     // Caution: overdetailed code following: 

     var itemsToDeleteFromGrdDruckVersand = values[0] 
     var itemsToDeleteFromGrdAusgabe = values[1] 

     var itemsToDelete = itemsToDeleteFromGrdDruckVersand; 

     foreach (var item in itemsToDeleteFromGrdAusgabe) 
     { 
      itemsToDelete.Add(item); 
     } 
     // you can do a lot better with Linq if you want 

     return itemsToDelete; 
    } 


    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 

的一點是,你commandParameters想要一個收集和你在給他的2個集的集合。所以你需要將這兩個集合合併爲一個才能使其工作。

編輯:只是爲了好玩,這裏將使用LINQ代碼:

return ((Collection<object>)values[0]).Concat((Collection<object>)values[1]); 

(你可能需要/想在你的項目的實際類型替換2「<object>」在這裏)

+0

你是對的,轉換器是問題所在。我使用:public object Convert(object [] values,Type targetType,object parameter,CultureInfo culture) { return new Tuple ((IList)values [0],(IList)values [1]); }並且一切正常。 – blindmeis 2011-04-12 05:25:18

+0

這是另一種方式:) – David 2011-04-12 07:03:35