2013-06-06 6 views
0

내 응용 프로그램에는 탐색 창에 두 페이지가 있습니다. 두 번째 인 -생성자를 사용하여 페이지에 매개 변수 전달

1 페이지 메인 페이지 및 세 (리본 메뉴 등) 위에 버튼 (프레임 내에서 이동하는 페이지의 후반부에) 프레임

2 페이지을 갖는다 페이지 1의 버튼을 클릭하면 프레임 내에서 지시되는 페이지입니다.

페이지 2 테스트 환경 용 TestServer1 .. TestServerN - 개발 용 -DevServer1 ... DevServern 및 Production -PrdServer1..PrdServerN 용 서버 목록을 표시합니다. Datagrid이 있습니다.

이 버튼의이 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 버튼, 그리고 매개 변수 (서버 s) 함께 전달합니다. 거기에 모호성 및 오류 .. 어떻게 다른 두 서버에 대해 달성하기 위해? 어떤 아이디어? 나는이 오류를 얻을 2 회 유형 'FN_UI.Views - 나는

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 내 코드에 이러한 추가 블록을 추가 할 때 나는 다음과 같은 한

편집

는 오류입니다 .Page2 '는 이미 동일한 매개 변수 유형으로'Page2 '라는 멤버를 정의합니다.

오류 2 -이 오류가 3 번 발생합니다. 'FN_UI.Views.Page2.Page2 (FN_UI.Server)'및 'FN_UI.Views.Page2.Page2 (FN_UI.UI).서버) '전체 코드에 대한

링크 - 만약 당신이 하나 개의 클래스에서 같은 매개 변수 유형 (들)과 세 개의 생성자를 가질 수 없습니다 https://gist.github.com/userXemY/c477c25c0c1641470c35

+0

자세히 설명해 주시겠습니까? (모호한 메서드 재정의는 대개 컴파일러에서 염려되는 항목이므로 반드시 피해야합니다.) 그리고 키워드 클래스는 page2에 대해 누락되었습니다. – icbytes

+0

확인 내 전체 코드를 붙여 넣을 것입니다 .. 그래야 아이디어를 얻을 수 있습니다 .. – 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 시도하고 돌아올 것입니다. 감사합니다. @clemens – user1221765

+0

각 시스템 (tst/prd 및 dev)에 대한 쿼리가 다릅니다. 다음 세 가지 쿼리를 배치해야합니까? – user1221765

+0

죄송 합니다만, "s"는 어디에서도 사용하지 않습니다 .. 제 실수는 – user1221765