Joh*_*ith 7 c# wpf extension-methods binding
我在C#中有一个简单的类:
public class Dog {
public int Age {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个像这样的扩展方法:
public static class DogExt {
public static string BarkYourName(this Dog dog) {
return dog.Name + "!!!";
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将BarkYourName
方法的结果绑定到wpf组件?
基本上:有什么方法可以将它绑定到扩展方法?
不,您无法绑定到扩展方法.您可以绑定到Name
-object的-property Dog
并使用转换器.
要创建转换器,请创建实现该IValueConverter
接口的类.您将只需要单向转换(从模型到视图),因此Convert
只需要实现该方法.ConvertBack
转换器不支持该方法,因此抛出一个NotSupportedException
.
public class NameToBarkConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var dog = value as Dog;
if (dog != null)
{
return dog.BarkYourName();
}
return value.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以按如下方式使用转换器:
<Grid>
<Grid.Resources>
<NameToBarkConverter x:Key="NameToBarkConverter" />
</Grid.Resources>
<TextBlock Text="{Binding Name, Converter={StaticResource NameToBarkConverter}}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
有关转换器的更多信息,请参阅MSDN:IValueConverter.
无法绑定到方法。您可以在类中创建属性,Dog
如下所示并绑定到它
public string NameEx
{
get
{
return this.BarkYourName();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想保持Name
同步NameEx
,只需在 -property 的 setter 中引发PropertyChanged
-event 即可。NameEx
Name
归档时间: |
|
查看次数: |
5918 次 |
最近记录: |