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