编程语言
首页 > 编程语言> > c# – 如何在运行时动态地将值传递给ObjectDataProvider.MethodParameters

c# – 如何在运行时动态地将值传递给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)值(得到用户).我怎么能这样做?

thaks

解决方法:

>为DataProvider提供一些默认值,以便它已经设置并绑定到UI.
>在运行时接受来自用户的值,然后使用FindResource调用将其提供给数据提供者并刷新…

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

或者另一个棘手的方法是使用MethodParameters绑定OneWayToSource …

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

但是为了使这个工作,你的TextBox Text(字符串)必须与参数的类型匹配,在我们的例子中,遗憾的是整数.
为了解决这个问题,请创建一个可以解决此问题的转换器.

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

标签:c,c-4-0,wpf,objectdataprovider
来源: https://codeday.me/bug/20190521/1147966.html