2012-05-25 16 views
8

करने के लिए कई CommandParameters पारित करने के लिए मैं निम्नलिखित कोड है:IMultiValueConverter का उपयोग 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(); 
    } 
} 

जब मैं जैसे ही यह वापसी मान लाइन हिट डिबग , सही मान सरणी में हैं, लेकिन जब मैं फ़िल्टरग्रीड कमांड को ट्रिगर करने वाले बटन को दबाता हूं, तो लौटाए गए मान शून्य दोनों होते हैं? क्या कोई मदद कर सकता है। धन्यवाद।

उत्तर

12

कुछ प्रयोग पुष्टि की है कि आदेश पैरामीटर में इस

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(); 
} 
+0

धन्यवाद फिल, यही कारण है कि मेरी समस्या हल! – bewilderedprogrammer