Notice: Undefined index: in /data/phpspider/phplib/misc.function.php on line 226
C# 文本框+;绑定到从不同程序集更改了InotifyProperty的属性_C#_Wpf_Textbox_Binding - Fatal编程技术网

C# 文本框+;绑定到从不同程序集更改了InotifyProperty的属性

C# 文本框+;绑定到从不同程序集更改了InotifyProperty的属性,c#,wpf,textbox,binding,C#,Wpf,Textbox,Binding,我在更新绑定到textbox的代码中的属性值时遇到问题(textbox没有显示新值) 它正常工作时没有任何问题,但在本例中,源类位于单独的程序集中(不知道它是否有任何区别) 如果我在文本框中键入,代码中的值将更新 当我直接在代码中更改属性值时,文本框不显示新值 再次更改文本框中的值后,先前设置的值(代码中)将被覆盖(因此绑定仍在工作) 此外,我还检查了PropertyChanged事件是否被触发,以及是否在每次更改之后触发 猜猜它为什么不起作用?下面是相应的绑定和源类 TextBox Text=

我在更新绑定到textbox的代码中的属性值时遇到问题(textbox没有显示新值)

它正常工作时没有任何问题,但在本例中,源类位于单独的程序集中(不知道它是否有任何区别)

  • 如果我在文本框中键入,代码中的值将更新
  • 当我直接在代码中更改属性值时,文本框不显示新值
  • 再次更改文本框中的值后,先前设置的值(代码中)将被覆盖(因此绑定仍在工作)
  • 此外,我还检查了PropertyChanged事件是否被触发,以及是否在每次更改之后触发

    猜猜它为什么不起作用?下面是相应的绑定和源类

    TextBox Text=“{Binding Path=Description,Mode=TwoWay}”


    我已经解决了问题,它显然没有连接到不同的程序集。我在将值设置为属性时有一个错误。

    我觉得它可以正常工作。唯一的区别是删除了DataContract标记并分配了DataContext。我的样本如下:

    <Window x:Class="_4206499.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="360" Width="578">
    <Grid>
        <TextBox Text="{Binding Path=Description, Mode=TwoWay}" VerticalAlignment="Center" Margin="12,12,286,278" />
        <Button Width="100" Margin="57,59,346,219" Click="Button_Click"></Button>
    </Grid>
    
    }

    另一个来自单独的类库: }

    
    using System;
    using System.ComponentModel;

    namespace ClassLibrary1 { public class Source : INotifyPropertyChanged { private String _Description;

        public String Description
        {
            get { return _Description; }
            set
            {
                if (_Description == value)
                    return;
    
                _Description = value;
                OnPropertyChanged("Description");
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }
    }
    

    您是否尝试在OnPropertyChanged中设置断点,并查看是否有任何内容附加到PropertyChanged事件?这会告诉你文本框是否被通知。我已经简化了我的问题太多,没有检查它是否仍然不起作用。我使用ICustomTypeDescriptor重定向属性,这就是为什么绑定只能以一种方式工作。这个问题也通过重定向OnPropertyChanged事件得到了解决。无论如何,谢谢你的帮助。 using System; using System.Windows; using ClassLibrary1;

    namespace _4206499 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Source = new Source(); DataContext = Source; }

        public Source Source { get; set;}
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Source.Description = DateTime.Now.ToString();
        } 
    }
    
    
    using System;
    using System.ComponentModel;

    namespace ClassLibrary1 { public class Source : INotifyPropertyChanged { private String _Description;

        public String Description
        {
            get { return _Description; }
            set
            {
                if (_Description == value)
                    return;
    
                _Description = value;
                OnPropertyChanged("Description");
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                var e = new PropertyChangedEventArgs(propertyName);
                handler(this, e);
            }
        }
    }