Отсутствие вопросов по этому вопросу может быть признаком запаха кода здесь, но ... Можно ли написать метод расширения для класса и привязки к ним, как будто бы вы обладаете свойством?Возможно ли связать привязку к методу расширения?
Предполагается, что мне предоставляется структура классов, которую я не могу кардинально изменить, но я хочу выразить серию своих логических свойств в виде строки для целей отображения.
упрощенный базовый класс:
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();
}
}
Чтобы добавить дополнительную сложность, я передается список этих вещей, и я пытаюсь связать с datagrid (с сильно ограниченным опытом 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: К сожалению ... –