Как написать метод для установки значений свойств в цикле foreach (связанный с Silverlight и MVVM) - PullRequest
2 голосов
/ 02 ноября 2010

У меня есть приложение Silverlight 4 MVVM, которое использует привязку данных для логических свойств, таких как isEditingCustormer, isEditingOrder, isEditingOrderItem, isEditingEmployee и т. Д. В ViewModel, чтобы установить состояние определенных частей представления. Требуется, чтобы редактировался только один регион, а не два одновременно. Поэтому внутри ViewModel (при ответе на пользовательские события) мы обнаруживаем, что сами пишем код: isEditingCustomer = FALSE; isEditingOrder = FALSE; isEditingOrderItem = FALSE; ... isEditingEmployee = истина;

Мы хотели бы иметь этот код в методе, чтобы мы могли просто вызвать метод и передать его в качестве параметра, имя свойства, которое должно быть установлено в true, а все остальные должны быть автоматически установлены в false с помощью этот метод. К сожалению, я не знаю, как это сделать. Любая помощь очень ценится. Благодарю. Trex

1 Ответ

2 голосов
/ 02 ноября 2010

Лично , я бы соблазнился сделать что-то вроде:

public enum EditMode {
    Customer, Order, OrderItem, Employee
}

И на самом деле тогда вы, вероятно, не нужны эти bools:

public EditMode EditMode {get;set;}

Или вы можете заменить на свойства:

private EditMode editMode;   
public bool IsEditingCustomer { get {return editMode == EditMode.Customer;}}
public bool IsEditingOrder { get {return editMode == EditMode.Order;}}
public bool IsEditingOrderItem { get {return editMode == EditMode.OrderItem;}}
public bool IsEditingEmployee { get {return editMode == EditMode.Employee;}}

Если вам нужно bools, возможно:

public void SomeMethod(..., EditMode mode) {
    isEditingCustomer = isEditingOrder =
        isEditingOrderItem = isEditingEmployee = false;
    switch(mode) {
        case EditMode.Customer: isEditingCustomer = true; break;
        case EditMode.Order: isEditingOrder = true; break;
        case EditMode.OrderItem: isEditingOrderItem = true; break;
        case EditMode.Employee: isEditingEmployee = true; break;
        default: throw new ArgumentOutOfRangeException("mode");
    }
}
...