Pasando el nombre de la propiedad fuertemente escrito como argumento

Tengo una coleccion deIEnumerable<School>&nbsp;que se pasa a un método de extensión que llena unaDropDownList. También me gustaría pasar elDataValueField&nbsp;yDataTextField&nbsp;como un argumento pero quería que fueran fuertemente tipados.

Básicamente, no quiero pasar unstring&nbsp;Para elDataValueField&nbsp;yDataTextField&nbsp;Argumentos, es propenso a errores.

public static void populateDropDownList<T>(this DropDownList source,
        IEnumerable<T> dataSource,
        Func<T, string> dataValueField,
        Func<T, string> dataTextField) {
    source.DataValueField = dataValueField; //<-- this is wrong
    source.DataTextField = dataTextField; //<-- this is wrong
    source.DataSource = dataSource;
    source.DataBind();
}

Llamado así ...

myDropDownList.populateDropDownList(states,
        school => school.stateCode,
        school => school.stateName);

Mi pregunta es, ¿cómo puedo pasar elDataValueField&nbsp;yDataTextField&nbsp;fuertemente tipado como un argumento para populateDropDownList?