Я изучаю сильные напечатанные данные Windows Forms DataBinding с использованием методов расширения. Я получил эту последующую помощь от Ксавье, как показано ниже: < /p>
using System;
using System.Linq.Expressions;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);
return dataBindings
.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled
)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);
return dataBindings.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}
private static string ProcessExpression(Expression expression)
{
string propertyName;
if (expression is MemberExpression)
{
propertyName = ((MemberExpression) (expression)).Member.Name;
}
else if (expression is UnaryExpression)
{
propertyName = ((MemberExpression) ((UnaryExpression) (expression)).Operand).Member.Name;
}
else
{
throw new InvalidOperationException(
"Unknown expression type error in DataBindingsExtensionMethods.Add");
}
return propertyName;
}
}
< /code>
Теперь я могу настроить дату данных, как это: < /p>
txtBoundInt.DataBindings.Add
(bindingSource, tb => tb.Text, contact => contact.Id);
< /code>
или это: < /p>
cboBoundSelectedItem.DataBindings.Add
(bindingSource, cbo => cbo.SelectedItem, con => con.ContactType)
< /code>
Похоже, что происходит много выражений. Есть ли лучший способ? < /P>
Редактировать: Я нашел лучший способ - это воспроизводится ниже @carl_g. < /P>
Подробнее здесь: https://stackoverflow.com/questions/344 ... atabinding
Сильные напечатанные данные Windows Forms DataBinding ⇐ C#
Место общения программистов C#
-
Anonymous
1740094372
Anonymous
Я изучаю сильные напечатанные данные Windows Forms DataBinding с использованием методов расширения. Я получил эту последующую помощь от Ксавье, как показано ниже: < /p>
using System;
using System.Linq.Expressions;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);
return dataBindings
.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression)
{
return Add(dataBindings, dataSource, controlExpression, objectExpression, false);
}
public static Binding Add
(this ControlBindingsCollection dataBindings,
object dataSource,
Expression controlExpression,
Expression objectExpression,
bool formattingEnabled
)
{
string controlPropertyName = ProcessExpression(controlExpression.Body);
string bindingTargetName = ProcessExpression(objectExpression.Body);
return dataBindings.Add(controlPropertyName, dataSource, bindingTargetName, formattingEnabled);
}
private static string ProcessExpression(Expression expression)
{
string propertyName;
if (expression is MemberExpression)
{
propertyName = ((MemberExpression) (expression)).Member.Name;
}
else if (expression is UnaryExpression)
{
propertyName = ((MemberExpression) ((UnaryExpression) (expression)).Operand).Member.Name;
}
else
{
throw new InvalidOperationException(
"Unknown expression type error in DataBindingsExtensionMethods.Add");
}
return propertyName;
}
}
< /code>
Теперь я могу настроить дату данных, как это: < /p>
txtBoundInt.DataBindings.Add
(bindingSource, tb => tb.Text, contact => contact.Id);
< /code>
или это: < /p>
cboBoundSelectedItem.DataBindings.Add
(bindingSource, cbo => cbo.SelectedItem, con => con.ContactType)
< /code>
Похоже, что происходит много выражений. Есть ли лучший способ? < /P>
Редактировать: Я нашел лучший способ - это воспроизводится ниже @carl_g. < /P>
Подробнее здесь: [url]https://stackoverflow.com/questions/3444294/strong-typed-windows-forms-databinding[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия