0

私は 2 つのページ (ユーザーと UserListing) を持っています。ユーザー ページに新しいユーザーを追加し、ページを UserListing ページに変更すると、UserListingページの ComboBoxUser が自動的に更新されません。これを解決するためのアイデアはありますか?

これは私のコードUser.csです

public class User : INotifyPropertyChanged
{
    string _firstName;
    public string FirstName {
        get { return _firstName; }
        set { 
            _firstName = value;
            OnPropertyChanged("FirstName");
            OnPropertyChanged("FullName");
        }
    }

    string _lastName;
    public string LastName {
        get { return _lastName; }
        set { 
            _lastName = value;
            OnPropertyChanged("LastName");
            OnPropertyChanged("FullName");
        }
    }

    public string FullName
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }

    int _gender;
    public int Gender {
        get { return _gender; }
        set { 
            _gender = value;
            OnPropertyChanged("Gender");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

UserListingViewModel.cs

public class UserListingViewModel : INotifyPropertyChanged
{
    public UserListingViewModel()
    {
        LoadDataUser();
    }

    public void LoadDataUser()
    {
        ComboUserData = new ObservableCollection<User>();

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[
            "dLondre.Properties.Settings.CSLONDRE"].ConnectionString);

        string str = "";
        str += "SELECT userid,firstname + ' ' + lastname as name FROM [user] ";

        SqlCommand com = con.CreateCommand();
        com.CommandText = str;

        try
        {
            con.Open();
            SqlDataReader sdr = com.ExecuteReader();
            while (sdr.Read())
            {
                ComboUserData.Add(new User { UserID = (string)sdr["userid"], FirstName = (string)sdr["name"]});
            }

            com.Dispose();
            con.Close();
            con.Dispose();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }


    ObservableCollection<User> _comboUserData;
    public ObservableCollection<User> ComboUserData
    {
        get
        {
            if (_comboUserData == null)
                _comboUserData = new ObservableCollection<User>();
            return _comboUserData;
        }
        set
        {
            if (value != _comboUserData)
                _comboUserData = value;
            OnPropertyChanged("ComboUserData");
        }
    }

    User _user;
    public User SelectedUserID
    {
        get { return _user; }
        set
        {
            _user = value;
            OnPropertyChanged("SelectedUserID");
        }
    }
}

これは私の XAML

                <ComboBox x:Name="DDUserId" 
                          Width="140" 
                          DisplayMemberPath="FirstName" 
                          IsSynchronizedWithCurrentItem="True" 
                          ItemsSource="{Binding ComboUserData, Mode=TwoWay}" 
                          SelectedItem="{Binding SelectedUserID}">
                </ComboBox>

メイン ウィンドウ XAML

    <mui:LinkGroup DisplayName="welcome">
        <mui:LinkGroup.Links>
            <mui:Link DisplayName="Login" Source="/Views/Login.xaml" />
            <mui:Link DisplayName="Register User" Source="/Views/UserView.xaml" />
            <mui:Link DisplayName="Manage Group" Source="/Views/UserGroupView.xaml" />
            <mui:Link DisplayName="List User" Source="/Views/UserListingView.xaml" />
        </mui:LinkGroup.Links>
    </mui:LinkGroup>
4

3 に答える 3

0

1) 2 番目のユーザーを追加した後、[ユーザー リスト] ページに移動する前にデータベースに保存されているかどうかを確認します。

2) 新しいユーザーがデータベースに追加された場合は、デバッガーを LoadDataUser メソッドに置き、UserList ページに移動して、ComboBox が新しく追加されたユーザーを取得できるかどうかを確認します。

ユーザーを別のページにロードしているので、コンボボックスへの通知の問題ではないと思います。接続に従ってユーザーをロードする必要があります。

于 2013-11-12T11:48:55.247 に答える