依赖属性不更改绑定值(MVVM-Helper)

问题描述 投票:0回答:1

我就是找不到丢失的那一块。我的 UserControl 不更新绑定属性。我正在后面的代码中创建一个新的用户控件。 SetValue 和 GetValue 方法被调用。如果 viewModel 正在初始化某个值,我的 UserControl 就会获取它。但是如果我更改文本框中的文本,视图模型将不保留该值。

我的代码:

public partial class MyUserControl : UserControl, INotifyPropertyChanged
{

       public MyUserControl()
       {
           InitializeComponent();
       }

       public static readonly DependencyProperty CommentToAddProperty=
        DependencyProperty.Register(
         nameof(CommentToAdd),
         typeof(string),
         typeof(MyUserControl),
         new FrameworkPropertyMetadata(
          default(string),
          FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
          OnCommentChange));


    public string CommentToAdd
    {
        get => (string)GetValue(CommentToAddProperty);
        set => SetValue(CommentToAddProperty, value);
    }

    private static void OnCommentChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {

        var myUC = d as MyUserControl;
        var comment = e.NewValue as string;
        myUC.CommentToAdd = comment;
        myUC.RaisePropertyChanged(nameof(CommentToAdd));
}

public partial class SomeWindow: Window
{
   public SomeWindow()
   {
     InitializeComponent();
     _vm = new MyViewModel();
     DataContext = _vm;
     var userControl = new UserControls.MyUserControl
     {
        CommentToAdd = _vm.CommentToAdd,  
     }

     \\Add usercontrol to a grid
   }

   
}

public partial class MyViewModel : ObservableObject
{
   [ObservableProperty]
   private string _commentToAdd;
}
    

这是我的 UserControl 中的 XAML 代码

<TextBox
    Grid.Column="0"
    Text="{Binding Path= CommentToAdd, Mode=TwoWay, 
    RelativeSource={RelativeSource 
        Mode=FindAncestor, 
        AncestorType=local:MyUserControl},  
    UpdateSourceTrigger=PropertyChanged}"/>
c# wpf xaml
1个回答
0
投票

作业

CommentToAdd = _vm.CommentToAdd

不建立 CommentToAdd 属性的数据绑定。

为了创建绑定,您必须编写

userControl.SetBinding(
    MyUserControl.CommentToAddProperty,
    new Binding("CommentToAdd"));
© www.soinside.com 2019 - 2024. All rights reserved.