2011-07-30 6 views
5

ランタイムでObjectDataProvider.MethodParametersに値を渡す方法:動的に私はこのコードを書いた

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; 
    } 
} 

と:私は私のパラメータを渡したい

<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> 

を値動的に(ここでは20である)(取得fron user)。私はこれをどのようにすることができますか?

thaks

答えて

5
  1. サプライデータプロバイダにはいくつかのデフォルト値はすでに設定し、あなたのUIに結合したSように。

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

それとも別のトリッキーな方法がMethodParametersとの結合OneWayToSourceにある...実行時にユーザーから値を受け入れ、その後にfindResourceコールを使用して、データプロバイダにそれを供給し、リフレッシュ.. 。

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

しかし、これはあなたのTextBoxのテキスト(文字列)を動作させるためには、悲しいことに、私たちの場合には、整数であるパラメータの型に一致しなければなりません。 これを修正するには、この問題を処理するコンバータを作成します。

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; 
    } 
} 
関連する問題