0

C# WPF MVVM を使用しています。そのため、XAML には、オブジェクトにバインドされたリストビューがあり、タブに応じて SQL データベースからさまざまな情報を表示するために使用されます。

例えば。2 つのフォームがあります。1 つは情報を表示するフォームで、もう 1 つは情報を入力するフォームです。新しい情報が別のフォームに入力された後、あるフォームのリストビューを自動的に更新するにはどうすればよいですか? リストビューを更新するには、タブを切り替える必要があるためです。

4

2 に答える 2

1

この要素のバインド方向は、 TwoWay (Mode=TwoWay)に公開する必要があります。

このような:

x:Name="list" ItemsSource="{Binding ....... , Path=........, Mode=TwoWay}}" ......

一方向のデフォルトのバインディングとは別に、バインディングを双方向、ソースへの一方向などに構成することもできます。これは、Mode プロパティを指定することによって行われます。

OneWay : ソース プロパティを変更すると、ターゲット プロパティが自動的に更新されますが、ソースは変更されません TwoWay : ソースまたはターゲットの変更により、他の プロパティが自動的に更新されますOneWayToSource : ターゲット プロパティを変更すると、ソース プロパティは自動的に更新されますが、ターゲットは変更されません OneTime : ソース プロパティへの最初の変更のみがターゲット プロパティを自動的に更新しますが、ソースは変更されず、その後の変更はターゲット プロパティに影響しません。

これを見ることができます:http://msdn.microsoft.com/en-us/library/ms752347.aspx

于 2013-03-07T08:17:25.500 に答える
1

フォームに新しい情報を入力したら、独自のメソッドを呼び出してみてください。これにより、情報がリスト ビューに更新されます。したがって、いくつかのイベントを使用できます。DataContentChangedまたは、フォームに新しいデータを追加するボタンをクリックすると、更新メソッドを呼び出すことができます。refresh メソッドの例は次のようになります。

public void 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;
}

編集: 問題を終了して解決するには、次のコード スニペットを使用してみてください。

//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 ;-)
    }
于 2013-03-07T10:02:14.243 に答える