關於這個問題缺乏問題可能是代碼味道的一個指示,但是......是否有可能爲一個類和數據綁定編寫擴展方法,使其像屬性一樣?是否有可能將數據綁定到擴展方法?
這個假設是我提供了一個我不能從根本上改變的類結構,但是我想將它的一系列布爾屬性表示爲一個字符串用於顯示目的。
簡化的基類:
public class Transmission
{
public int ID { get; set; }
public bool Cancelled { get; set; }
public bool Stored { get; set; }
public bool Recorded { get; set; }
}
我的擴展方法:
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();
}
}
爲了進一步增加的複雜性,我傳遞的這些事情的清單,我試圖綁定到一個數據網格(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>
我測試了代碼,並且能夠毫無困難地綁定到ID。然而,'地位'根本沒有被收回。綁定到擴展屬性有一個技巧嗎?或者只是寫一個裝飾器/外觀類並綁定到它會更審慎?
你不能綁定到擴展方法......實際上你不能綁定到任何方法,必須是一個屬性... – McGarnagle
另外,沒有這種東西作爲「擴展屬性」 –
@MarcGravell:不幸... –