2013-03-07 2 views
0

C# WPF MVVM을 사용하고 있습니다. 그래서 XAML에는 탭에 따라 SQL 데이터베이스와 다른 정보를 표시하는 데 사용되는 객체에 바인딩 된 listview가 있습니다.DB에 새 항목을 추가 한 후 listview를 자동으로 업데이트하는 방법

예를 들면. 나는 두 가지 형식을 가지고 있습니다 : 하나는 정보를 보여주고 다른 하나는 정보를 입력하는 데 사용됩니다. 새로운 정보가 다른 양식에 입력 된 후 어떻게 하나의 양식에서 목록보기를 자동으로 업데이트 할 수 있습니까? 이제는 목록 뷰를 업데이트하기 위해 탭을 전환해야하기 때문입니다. 이 요소

+0

이벤트를 듣고 있습니까? 이 모호한 질문 (코드 없음)을 사용하면 여기서 많은 도움을 얻지 못할 것입니다. – Najzero

+0

이벤트 listeting에 의해 추측 ... – user1669713

답변

1

결합 방향 양방향 (MODE = 양방향)이 추천

에 노출되어야한다

X : NAME = "목록" ItemsSource = "{바인딩 .. ....., 경로 = ........., 모드 = 양방향}} "...

기본 바인딩과 별개로 바인딩은 양방향, 한 가지 방법으로 구성 할 수 있습니다. 이 작업은 Mode 속성을 지정하여 수행됩니다.

편도는 : 자동으로 대상의 속성을 업데이트하기 위해 소스 속성에 변화를 초래하지만, 소스는 양방향 변경되지 않습니다 원인 : 다른 OneWayToSource 업데이트를 소스에 변경 또는 원인이 자동으로 대상 소스 속성을 자동으로 업데이트하지만 대상이 변경되지 않도록 대상 속성을 변경합니다. OneTime : 대상 속성을 자동으로 업데이트하기 위해 소스 속성을 처음으로 변경하기 만하지만 원본은 변경되지 않고 이후 변경 사항이 수행합니다. 목표 프로에 영향을 미치지 않는다. 당신이 볼 수

perty : http://msdn.microsoft.com/en-us/library/ms752347.aspx

+0

내 마음에 문제는 어떻게 든 listview 개체에 바인딩 된 업데이트해야합니다. – user1669713

+0

같은 예제를 보면, 그들은 당신을 도울 것입니다 http://www.codeproject.com/Articles/29054/WPF-Data-Binding-Part-1 – Zhenia

+0

나는 모든 정보가 들어있는 Object에 바인딩 된 Listview 있습니다. Object는 NHibernate를 사용하여 SQL 데이터베이스로부터 정보를 얻는다. 그러나 새로운 정보가 데이터베이스에 추가 된 후에는 업데이트되지 않습니다. 그래서 바인딩이 도움이되지 않습니다. 내 마음에 ... – user1669713

1

을 폼에 새로운 정보를 입력 한 후, 목록보기에 정보를 업데이트 할, 자신의 메소드를 호출하려고합니다. 예를 들어 이벤트를 사용할 수 있습니다. DataContentChanged 또는 양식에 새 데이터를 추가하는 버튼을 클릭하면 업데이트 방법을 호출 할 수 있습니다. 새로 고침 방법의 예는 다음과 같아야합니다

공공 무효 lbRefresh()를

 { 
     //create itemsList for listbox 
     ArrayList itemsList = new ArrayList(); 
     //count how many information you wana to add 
     //here I count how many columns I have in dataGrid1 
     int count = dataGrid1.Columns.Count; 
     //for cycle to add my strings of columns headers into an itemsList 
     for (int i = 0; i < count; i++) 
     { 
      itemsList.Add(dataGrid1.Columns[i].Header.ToString()); 
     } 
     //simply refresh my itemsList into my listBox1 
     listBox1.ItemsSource = itemsList; 
    } 

< \ 코드>

I가 발생할 경우는 미스 이해 죄송합니다, 도움이되기를 바랍니다.

편집 : 완료하여 문제를 해결하려면,이 코드 조각을 사용하려고 :

 //some btn_Click Event in one window //(lets say, its your callback " to update" button in datagrid) private void Button_Click_1(object sender, RoutedEventArgs e) { //here you doing somethin //after your datagrid got updated, try to store the object, //which u want to send into your eg. listbox data[0] = data; //my stored data in array //for better understanding, this method "Button_Click_1" is called from Window1.xaml.cs //and I want to pass information into my another window Graph1.xaml.cs //create "newWindow" object onto your another window and send "data" by constuctor var newWindow = new Graph1(data); //line * //you can call this if u want to show that window after changes applied newWindow.Show(); } 

당신의 Graph1.xaml 그 후.CS는 다음과 같이 표시되어야합니다.

public partial class Graph1 : Window 
    {//this method takes over your data u sent by line * into previous method explained 
     public Graph1(int[]data) 
     { 
      InitializeComponent(); 
//now you can direcly use your "data" or can call another method and pass your data into it 
      ownListBoxUpdateMethod(data); 

     } 
     private void ownListBoxUpdateMethod(int[] data) 
     { 
      //update your listbox here and its done ;-) 
     } 

나는 그것이 도움이되기를 바랍니다. 감사합니다, Kevin Sky.

+0

응답 해 주셔서 대단히 감사합니다. 실제로 그것은 나를 위해 가장 적합합니다. 문제는 MVVM이기 때문에 프로그램 코드에서 listview에 직접 액세스 할 수 없다는 것입니다. 그래서 어떻게 든 Object를 업데이트해야합니다. 그러나 나는이 문제를 해결하기 위해 가깝다고 생각한다. – user1669713

관련 문제