У меня есть следующая проблема в моем текущем приложении. (К классу следует понимать классы Entity Framework Entity.)Получение данных с различными статическими значениями
Предполагается, что у вас есть статический класс, содержащий некоторые свойства, которые широко используются в качестве примера в variaous Get/Set of properties.
Get the property вызывается каждый раз, когда вы запрашиваете это свойство, с привязкой данных к некоторому управлению, которое это возможно происходит каждый раз, когда есть перерисовывание (обновление макета) элемента управления.
Теперь я столкнулся с проблемой, что может возникнуть ситуация, когда я хочу открыть 2 окна с разными «статическими» значениями, каков наилучший способ достичь этого сценария?
Вот код, который может быть, делает вещи проще понять:
Статический класс, придерживая свойства, которые используются в запросах:
public static class Core
{
public string IdLang { get; set; }
public string IdCompany { get; set; }
}
Класс, который использует Core.IdLang в GET/набор недвижимости Название:
public class Car
{
private string _name;
public string Name
{
get
{
_name = (from x in LanguageTables
where x.IdLang == Core.IdLang
select x.Text).FirstOrDefault();
return _name;
}
set
{
if (value == _name)
return;
var languageTable = (from x in LanguageTables
where x.IdLang == Core.IdLang
select x).FirstOrDefault();
if (languageTable == null)
{
languageTable = new LanguageTable();
languageTable.IdLang = Core.IdLang;
}
languageTable.Text = _name;
}
}
}
Теперь предположим, у вас есть 2 DataGrids в 2-х разных окнах и хотите связать список автомобилей с двумя различными языками.
Я делаю следующее (пример только для 1 сетки и окна):
public class Window1 : Window
{
List<Car> Cars;
public Window1()
{
InitializeComponents();
Core.IdLang = "DE";
Cars = new List<Car>();
//fetch data from Database, and populate the List<Car>
Grid1.ItemsSource = from x in Cars
select x;
}
}
Теперь просто думать о копировании и вставке этот код выше (window1) и есть второе окно и хотите, чтобы отобразить все автомобили с их английскими именами, поэтому я изменил следующий код:
Core.IdLang = "DE";
к
Core.IdLang = "EN";
И думал, что все сработает, но то, что когда-либо Window вы называете позже, Core.IdLang теперь имеет это значение, и как только Get/Set вызывается в любом Окне, вы будете получать или изменять его только на этом языке, а не иначе между окнами ,
В реальном приложении класс Core будет состоять из около 6 (или более) свойств, которые используются в более чем 50 классах, все из которых имеют минимум одно свойство, имеющее тот же код get/set, что и вы, .Имя образца.
Любой из этих классов может использоваться в предоставленном сценарии, где я хотел бы показывать английские и немецкие данные рядом друг с другом для сравнения.
Если они изменяются для каждого экземпляра, который использует его, 'Core' не должен быть статическим классом, а скорее классом, который имеет свойства, которые имеют значения по умолчанию. –