2011-04-11 4 views
1

다음 항목을 사용하여 선택한 항목을 DataGrid에서 가져오고 올바르게 작동합니다. multibinding datagrid selecteditems가 작동하지 않습니다.

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

는 지금은 2 DataGrids를에서 selectedItems를 2 개 목록을 필요로하는 명령이있다.

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

converter.Convert() 방법은 초기에 한 번만 호출하지만, CommandParameter는 항상 null입니다 : 그래서 나는 다음과 같은 multibinding을 시도했다. 어쩌면 내가 모르는 뭔가가있어 ...

편집 : grdDruckVersand 및 grdAusgabe은 DataGrids를

있습니다
<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

+0

변환기가 추가되었습니다 – blindmeis

+0

side note : 코드 피쳐와 xaml 코드 사이에 텍스트를 두어 두 조각으로 나누고 각 언어에 올바른 색을 지정합니다. – David

답변

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 하나의 콜렉션을 원하고 당신이 그에게이 컬렉션의 컬렉션을 제공하고 있다는 점이다. 따라서이 두 컬렉션을 하나로 합쳐서 작동시켜야합니다.

편집 : 그냥 재미를 위해, 여기 Linq에를 사용하여 코드가 될 것이다 :

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

(당신은 /이 항목의 실제 유형에 의해 여기에 2 "<object>"를 대체 할 수 있습니다)

+0

변환기가 문제였습니다. 내가 사용 : 공공 개체 변환 (개체 [] 값, 유형 targetType, 개체 매개 변수, CultureInfo 문화권) { 반환 새 튜플 ((IList) values ​​[0], (IList) values ​​[1])); } 그리고 모두 정상적으로 작동합니다. – blindmeis

+0

그것은 그것을하는 다른 방법입니다 :) – David

관련 문제