是否可以数据绑定到扩展方法?

Mad*_*bot 3 c# data-binding wpf facade mvvm

缺乏关于这个问题的问题可能是这里代码味道的一个迹象,但是......是否有可能为类和数据绑定写一个扩展方法,就像你想要一个属性一样?

假设我提供了一个我无法从根本上改变的类结构,但我想将一系列布尔属性表示为字符串以用于显示目的.

简化的基类:

public class Transmission
{
    public int ID { get; set; }
    public bool Cancelled { get; set; }
    public bool Stored { get; set; }
    public bool Recorded { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的扩展方法:

public static class Extensions
{
    public static string Status(this Transmission trans)
    {
        StringBuilder sb = new StringBuilder("|");
        if (trans.Cancelled)
            sb.Append("| Cancelled ");
        if (trans.Recorded)
            sb.Append("| Recorded ");
        if (trans.Stored)
            sb.Append("| Stored ");
        sb.Append("||");

        return sb.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了进一步增加复杂性,我正在传递这些内容的列表,并且我正在尝试绑定到数据网格(具有严格限制的XAML体验).

<GroupBox Header="Here is an amazing list of results for you to violate horribly.">
    <DataGrid ItemsSource="{Binding Transmissions, Mode=OneWay}" AutoGenerateColumns="False">
         <DataGrid.Columns>
            <DataGridTextColumn Width="*" Header="Local ID" Binding="{Binding ID, Mode=OneWay}"/>
            <DataGridTextColumn Width="*" Header="Status" Binding="{Binding Status, Mode=OneWay}"/>
         </DataGrid.Columns>
    </DataGrid>
</GroupBox>
Run Code Online (Sandbox Code Playgroud)

我已经测试了代码,并且能够毫无困难地绑定到ID.然而,"状态"根本没有被提取.是否有绑定到扩展属性的技巧?或者只是编写一个装饰器/外观类并绑定到它会更谨慎吗?

H.B*_*.B. 6

这就是你通常使用像MVVM这样的模式.您可以向视图模型添加属性,这些属性基于模型并且仅与视图相关.视图模型可以包含对模型的引用,以直接绑定到其属性或在视图模型上镜像它们(对于解耦,我会选择后者).