c# – 使用viewmodel绑定usercontrol的依赖属性

c# – 使用viewmodel绑定usercontrol的依赖属性,第1张

概述本质上,我有一个主窗口,其上有一个用户控件,包含一个绑定到主窗口视图模型的属性.这个想法是当属性在用户表单中发生变化时,通过绑定主窗口视图模型中的属性也会发生变化.问题是,当用户控件没有ViewModel时,这是有效的,当我向用户控件添加一个简单的ViewModel时,绑定不再起作用.因为我需要为我的控件设置ViewModel,所以我需要弄清楚为什么添加ViewModel会破坏绑定以及如何修复它. 本质上,我有一个主窗口,其上有一个用户控件,包含一个绑定到主窗口视图模型的属性.这个想法是当属性在用户表单中发生变化时,通过绑定主窗口视图模型中的属性也会发生变化.问题是,当用户控件没有viewmodel时,这是有效的,当我向用户控件添加一个简单的viewmodel时,绑定不再起作用.因为我需要为我的控件设置viewmodel,所以我需要弄清楚为什么添加viewmodel会破坏绑定以及如何修复它.欢迎任何建议.

public partial class Control1 : UserControl,INotifyPropertyChanged{   public Control1()    {        InitializeComponent();        Loaded += Control1_Loaded;    }    voID Control1_Loaded(object sender,RoutedEventArgs e)    {        DataContext = new Control1viewmodel();    }    public static DependencyProperty SavedStringProperty = DependencyProperty.Register(       "SavedString",typeof(string),typeof(Control1));    public string SavedString    {        get        {            return (string)GetValue(SavedStringProperty);        }        set        {            SetValue(SavedStringProperty,value);        }    }    public event PropertyChangedEventHandler PropertyChanged;    private voID FirePropChanged(string property)    {        if (PropertyChanged != null)            PropertyChanged(this,new PropertyChangedEventArgs(property));    }    private voID button_Click_1(object sender,RoutedEventArgs e)    {         SavedString = "Hi";    }   }public class MainWindowviewmodel : INotifyPropertyChanged{    private string _message = "Hi";    public string myMessage    {        get        {          return _message;          }        set        {            _message = value;            FirePropChanged("myMessage");        }    }    public event PropertyChangedEventHandler PropertyChanged;    private voID FirePropChanged(string property)    {        if (PropertyChanged != null)            PropertyChanged(this,new PropertyChangedEventArgs(property));    }    private string _savedString;    public string SavedString    {        get        {            return _savedString;        }        set        {            _savedString = value;            FirePropChanged("SavedString");        }    }}

xaml(在MainWindow中):

<myCtrl:Control1 SavedString="{Binding Path=SavedString,Mode=TwoWay}"/>

cs(我的uc viewmode):

public class Control1viewmodel : INotifyPropertyChanged {      public event PropertyChangedEventHandler PropertyChanged;        }
解决方法 当您的UC拥有自己的Vm,即它自己的DataContext时,
你需要爬上可视树并引用它的父级(Window)DataContext

<myCtrl:Control1 SavedString="{Binding relativeSource={relativeSource     AncestorType=Window} Path=DataContext.SavedString,Mode=TwoWay}"/>
总结

以上是内存溢出为你收集整理的c# – 使用viewmodel绑定usercontrol的依赖属性全部内容,希望文章能够帮你解决c# – 使用viewmodel绑定usercontrol的依赖属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存