2011-07-30 15 views
5

pisałem ten kod:Jak przekazać wartość ObjectDataProvider.MethodParameters dynamicznie w czasie wykonywania

public class CustomData 
{ 
    public int F1 { get; set; } 
    public int F2 { get; set; } 
    public string F3 { get; set; } 
} 


public class RetrievCustomData : List<CustomData> 
{ 
    public RetrievCustomData GetSome(int i) 
    { 
     for (int j = 0; j < i; j++) 
     { 
      CustomData cd = new CustomData(); 
      Random rnd = new Random(); 
      cd.F1 = j; 
      cd.F2 = rnd.Next(i); 
      cd.F3 = "nima"; 
      this.Add(cd); 
     } 

     return this; 
    } 
} 

oraz:

<Window.Resources> 
    <ObjectDataProvider x:Key="ADUsers" ObjectType="{x:Type src:RetrievCustomData}" 
       MethodName="GetSome"> 
     <ObjectDataProvider.MethodParameters> 
      <sys:Int32>20</sys:Int32> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
</Window.Resources> 

Chcę przekazać moje parametr (tutaj 20) wartość dynamicznie (get użytkownik fron) .Jak mogę to zrobić?

thaks

Odpowiedz

5
  1. Supply jakaś wartość domyślna do DataProvider tak że y już skonfigurowane i związany do interfejsu użytkownika.

  2. Zebrane wartości od użytkownika w czasie wykonywania, a następnie dostarczyć że dostawcy danych z wykorzystaniem FindResource połączenia i odświeżyć ...

     var myValue = GetFromUser(); 
         ((ObjectDataProvider)this.FindResource("ADUsers")).MethodParameters.Clear(); 
         ((ObjectDataProvider)this.FindResource("ADUsers")).MethodParameters.Add(myValue); 
         ((ObjectDataProvider)this.FindResource("ADUsers")).Refresh(); 
    

Albo inny trudne sposobem jest OneWayToSource wiązania z MethodParameters .. .

<TextBox x:Name="UserInput"> 
     <TextBox.Text> 
       <Binding Source="{StaticResource ADUsers}" 
         Path="MethodParameters[0]" 
         BindsDirectlyToSource="True" 
         Mode="OneWayToSource"> 
       </Binding> 
     </TextBox.Text> 
    </TextBox> 

Ale do tego, aby pracować na swój TextBox Text (String) musi być dopasowany do typu parametru, który niestety w naszym przypadku jest liczbą całkowitą. Aby to naprawić, utwórz konwerter, który zajmie się tym problemem.

public class IntToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.ToString(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     int intValue = 0; 

     string strText = value?.ToString(); 

     if (!string.IsNullOrEmpty(strText)) 
     { 
      intValue = int.Parse(strText); 
     } 

     return intValue; 
    } 
} 
Powiązane problemy