将嵌套的 UserComponent 绑定到它的 ViewModel

发布于 2024-11-26 19:27:19 字数 2942 浏览 0 评论 0原文

我有一个 WFP 项目,并且正在使用 MVVM 模式。 我有在 CustomerView UserControl 中使用的 AddressView User 控件。

我的 AddressVeiw userControl 有一个 AddressViewModel,CustomerView 有一个 CustomerViewModel

CustomerViewModel 的代码

 public DelegateCommand;保存命令 { 获取;放; }

 
        私有字符串名字;

        公共字符串 名字
        {
            获取 { 返回名字; }
            放 { 
                名字 = 值;
                RaisePropertyChanged("名字");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }

        私有字符串姓氏;

        公共字符串姓氏
        {
            获取 { 返回姓氏; }
            放 { 
                姓氏 = 值;
                RaisePropertyChanged("姓氏");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }
        私有AddressViewModel地址ViewModel;

        公共地址视图模型地址视图模型
        {
            获取{返回地址ViewModel; }
            设置 { 地址视图模型 = 值; }
        }

        私有字符串中间名;

        公共字符串 中间名
        {
            获取 { 返回中间名; }
            放
            {
                中间名=值;
                RaisePropertyChanged("中间名");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }
        私有字符串全名;

        公共字符串全名
        {
            获取 { 返回全名; }
            放 { 
                全名=值;
                RaisePropertyChanged("全名");
            }
        }
        
            
        私有无效InitializeCommands()
        {
            SaveCommand = new DelegateCommand(OnSaveCommand, CanSaveExcute);
        }

        私有 bool CanSaveExcute(对象 obj)
        {
            if (string.IsNullOrEmpty(firstName) ||string.IsNullOrEmpty(lastName))
                返回假;
            返回真;
        }

        私有无效OnSaveCommand(对象obj)
        {
            全名 = 名字 + " " + 姓氏;
        }

    }

AddressViewModel 的代码

 private ObservableCollection; CountryList = new ObservableCollection();

    公共 ObservableCollection;国家列表
    {
        获取{返回国家列表; }
        设置{国家/地区列表=值; }
    }

    公共 DelegateCommand<对象>;保存命令 { 获取;放; }

    私有无效负载()
    {
        尝试
        {
            CountryList = (new CountryRepository().GetAll());
        }
        catch(异常前)
        {

            OnSetStatusBarText("错误:" + ex.Message.ToString());
        }

    }
    私人无效OnSetStatusBarText(字符串消息)
    {
        var evt = eventAgg.GetEvent();
        evt.Publish(消息);
    }
    私有无效InitializeCommands()
    {
        SaveCommand = new DelegateCommand(OnSaveCommand, CanSaveExcute);
    }
    私有 bool CanSaveExcute(对象 obj)
    {

        返回真;
    }

    私有无效OnSaveCommand(对象obj)
    {

    }

一些我如何将我的 AddressViewModel 挂接到我的 AddressView,客户工作正常...... 必须做什么才能解决这个问题? 谢谢

I have a WFP Project and i am using MVVM Pattern.
I have AddressView User control which i used in CustomerView UserControl.

<my:AddressVeiw Width="340" DataContext="AddressViewModel"/>

My AddressVeiw userControl has a AddressViewModel and CustomerView has a CustomerViewModel

Code for CustomerViewModel

        public DelegateCommand<object> SaveCommand { get; set; }

 
        private string firstName;

        public string FirstName
        {
            get { return firstName; }
            set { 
                firstName = value;
                RaisePropertyChanged("FirstName");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }

        private string lastName;

        public string LastName
        {
            get { return lastName; }
            set { 
                lastName = value;
                RaisePropertyChanged("LastName");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }
        private AddressViewModel addressViewModel;

        public AddressViewModel AddressViewModel
        {
            get { return addressViewModel; }
            set { addressViewModel = value; }
        }

        private string middleName;

        public string Middlename
        {
            get { return middleName; }
            set
            {
                middleName = value;
                RaisePropertyChanged("MiddleName");
                SaveCommand.RaiseCanExecuteChanged();
            }
        }
        private string fullName;

        public string FullName
        {
            get { return fullName; }
            set { 
                fullName = value;
                RaisePropertyChanged("FullName");
            }
        }
        
            
        private void InitializeCommands()
        {
            SaveCommand = new DelegateCommand<object>(OnSaveCommand, CanSaveExcute);
        }

        private bool CanSaveExcute(object obj)
        {
            if (string.IsNullOrEmpty(firstName) ||string.IsNullOrEmpty(lastName))
                return false;
            return true;
        }

        private void OnSaveCommand(object obj)
        {
            FullName = FirstName + " " + LastName;
        }

    }

Code for AddressViewModel

    private ObservableCollection<Country> countryList = new ObservableCollection<Country>();

    public ObservableCollection<Country> CountryList
    {
        get { return countryList; }
        set { countryList = value; }
    }

    public DelegateCommand<object> SaveCommand { get; set; }

    private void Load()
    {
        try
        {
            CountryList = (new CountryRepository().GetAll());
        }
        catch (Exception ex)
        {

            OnSetStatusBarText("Error: " + ex.Message.ToString());
        }

    }
    private void OnSetStatusBarText(string message)
    {
        var evt = eventAgg.GetEvent<StatusBarMessageEvent>();
        evt.Publish(message);
    }
    private void InitializeCommands()
    {
        SaveCommand = new DelegateCommand<object>(OnSaveCommand, CanSaveExcute);
    }
    private bool CanSaveExcute(object obj)
    {

        return true;
    }

    private void OnSaveCommand(object obj)
    {

    }

Some how i can hook my AdddressViewModel To my AddressView, Customer Works fine...
What Must be done to resolve this problem?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倒带 2024-12-03 19:27:19

您需要对 AddressView 的 DataContext 使用绑定表达式。而不是这个...

<my:AddressVeiw Width="340" DataContext="AddressViewModel"/>

...尝试这个...

<my:AddressVeiw Width="340" DataContext="{Binding AddressViewModel}"/>

You need to use a binding expression for the DataContext of your AddressView. Instead of this...

<my:AddressVeiw Width="340" DataContext="AddressViewModel"/>

...try this...

<my:AddressVeiw Width="340" DataContext="{Binding AddressViewModel}"/>
末骤雨初歇 2024-12-03 19:27:19

你很接近,但你需要一个绑定:

<my:AddressVeiw Width="340" DataContext="{Binding AddressViewModel}"/>

You're close, but you need a binding:

<my:AddressVeiw Width="340" DataContext="{Binding AddressViewModel}"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文