2011-07-30 19 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用戶)。我可以這樣做嗎?

thaks

回答

5
  1. 提供一些默認值DataProvider的,這樣它那已經建立並綁定到您的UI。

  2. 在運行時接受來自用戶的值,然後提供,爲使用FindResource通話和刷新數據提供者...

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

或者另一種取巧的辦法是OneWayToSource與MethodParameters結合.. 。

<TextBox x:Name="UserInput"> 
     <TextBox.Text> 
       <Binding Source="{StaticResource ADUsers}" 
         Path="MethodParameters[0]" 
         BindsDirectlyToSource="True" 
         Mode="OneWayToSource"> 
       </Binding> 
     </TextBox.Text> 
    </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; 
    } 
} 
相關問題