2013-06-06 3 views
0

В моем приложении у меня есть две страницы, расположенные в окне навигации.Передача параметров на страницу с использованием конструкторов

Page 1 главная страница и имеет три кнопки сверху (как меню ленты) и рама (на второй половине страницы, чтобы перемещаться в пределах кадра)

Page 2 - это второе страница, которая будет направлена ​​в рамку при нажатии кнопок на странице.

У меня есть Datagrid, отображающий список серверов для тестовой среды - TestServer1 .. TestServerN, для разработки -DevServer1 ... DevServern и для Production -PrdServer1..PrdServerN.

в настоящее время, когда эти кнопки являются cliked, все серверы которые будут отображаться в сетке, но моя задача показать в следующем порядке,

, когда пользователь щелкает

tstbutton (тест) - это следует перейти на страницу 2 и отобразить только серверы, принадлежащие тестовой системе.

devbutton (dev) - он должен перейти на страницу 2 и отображать только серверы, принадлежащие системе разработки.

prdbutton (prd) - он должен перейти на страницу 2 и отображать только серверы, принадлежащие производственной системе.

Я пробовал следующее, но я мог бы достичь только для одного сервера, передав параметр через конструктор.

Page1.cs

public partial class Page1 : Page 
{ 
public Page1() 
{ 
InitializeComponent(); 
} 

private void PRD_Btn_Click(object sender, RoutedEventArgs e) 
{ 
// Server x = new Server(); 
Page2 pg = new Page2(); 
this.NavigationService.Navigate(pg); 
} 

private void TST_Btn_Click(object sender, RoutedEventArgs e) 
{ 
// this works, only if I pass one paramaterized constructor 
Server s = new Server(); 
Page2 pg = new Page2(s); 
this.NavigationService.Navigate(pg); 
} 

private void DEV_Btn_Click(object sender, RoutedEventArgs e) 
{ 
// Server y = new Server(); 
Page2 pg = new Page2(); 
this.NavigationService.Navigate(pg); 
} 
} 

Page2.cs

public partial class Page2: Page 
{  
public Page2() 
{ 
InitializeComponent(); 
} 
public Page2(Server s) 
{ 
Db_Entities db = new Db_Entities(); 
string tst = "TEST"; 
var query1 = (from a in this.db.Servers 
      where a.ServerID.Contains(tst) 
      orderby a.ServerID 
      select a).ToList(); 
datagrid1.ItemsSource = query1.ToList(); 
} 
} 

Приведенный выше код работает отлично .. но если я раскомментировать код для другого два нажмите мероприятия для prdtst и кнопку devtst, и я передаю параметры вместе с (Server s) .. есть двусмысленность и ошибки .. как достичь для двух других серверов? есть идеи ??

EDIT

Я следующие ошибки, когда я добавить эти дополнительные блоки к моему коду

public Page2(Server x) 
{ 
Db_Entities db = new Db_Entities(); 
string prd = "PRD"; 
var query1 = (from a in this.db.Servers 
      where a.ServerID.Contains(prd) 
      orderby a.ServerID 
      select a).ToList(); 
datagrid1.ItemsSource = query1.ToList(); 
} 
public Page2(Server x) 
{ 
Db_Entities db = new Db_Entities(); 
string dev = "DEV"; 
var query1 = (from a in this.db.Servers 
      where a.ServerID.Contains(dev) 
      orderby a.ServerID 
      select a).ToList(); 
datagrid1.ItemsSource = query1.ToList(); 
} 

Ошибка 1 - Я получаю эту ошибку в 2 раза Тип «FN_UI.Views .Page2 'уже определяет элемент с именем «Страница 2» с теми же параметрами

Ошибка 2 - Я получаю эту ошибку 3 раза Вызов неоднозначен между следующими методами или свойствами: 'FN_UI.Views.Page2.Page2 (FN_UI.Server)' и 'FN_UI.Views.Page2.Page2 (FN_UI.Server)»

ссылка на полный код - https://gist.github.com/userXemY/c477c25c0c1641470c35

+0

Можете ли вы объяснить подробно, пожалуйста? (Кстати, неоднозначные переопределения методов обычно вызывают озабоченность у компилятора, не забудьте их избежать). И класс ключевого слова отсутствует для страницы2 – icbytes

+0

ok Я вставлю весь свой код .. так, чтобы у вас появилась идея .. – user1221765

+0

Я добавил код к своему вопросу, для полной справки, любезно проверьте эту ссылку - https: //gist.github.com/userXemY/c477c25c0c1641470c35 – user1221765

ответ

2

Вы не можете иметь три конструктора с тем же типом параметра (ов) в одном классе.

И вы действительно используете параметр конструктора Server s в любом месте?

Во всяком случае, писать только один конструктор, добавив строку поиска в качестве другого параметра:

public Page2(Server s, string what) 
{ 
    InitializeComponent(); // and don't forget this 

    Db_Entities db = new Db_Entities(); 
    var query1 = (from a in this.db.Servers 
        where a.ServerID.Contains(what) 
        orderby a.ServerID 
        select a).ToList(); 
    datagrid1.ItemsSource = query1.ToList(); 

    // where is s used? 
} 

, а затем называют это так:

Server s = new Server(); 
Page2 pg = new Page2(s, "TEST"); 

и

Server s = new Server(); 
Page2 pg = new Page2(s, "PRN"); 

и

Server s = new Server(); 
Page2 pg = new Page2(s, "DEV"); 
+0

ok Я попробую и вернусь .. thanks @clemens – user1221765

+0

запрос различен для каждой системы (tst/prd и dev) .. мне нужно разместить три разных запроса? – user1221765

+0

Извините, «s» нигде не используется. Моя ошибка – user1221765

Смежные вопросы