Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF DataContext已更新,但UI未更新_Wpf_User Interface_Binding_Datacontext - Fatal编程技术网

WPF DataContext已更新,但UI未更新

WPF DataContext已更新,但UI未更新,wpf,user-interface,binding,datacontext,Wpf,User Interface,Binding,Datacontext,我有最简单的应用程序。我想在按下按钮时填充列表框。我使用绑定,窗口DataContext在一些操作后更新,但UI没有更新 代码如下: MainWindow.xaml ViewModel.cs 您需要支持属性更改通知。使用NuGet软件包管理器引用MVVM Lite项目,从ViewModelBase派生ViewModel,然后将链接属性更改为: private string _link; { public string link { get {return this

我有最简单的应用程序。我想在按下按钮时填充列表框。我使用绑定,窗口DataContext在一些操作后更新,但UI没有更新

代码如下:

MainWindow.xaml

ViewModel.cs


您需要支持属性更改通知。使用NuGet软件包管理器引用MVVM Lite项目,从ViewModelBase派生ViewModel,然后将链接属性更改为:

private string _link;
{
    public string link
    {
        get {return this._link;}
        set {this._link=value; RaisePropertyChanged(() => this.link); }
    }
}
您还需要为URL属性执行此操作,该属性必须是公共的,以便绑定工作。我也知道这有点超出了问题的范围,但一般来说,不应该像这样使用单击处理程序,正确的方法是向ViewModel添加一个RelayCommand,并将按钮的Command属性绑定到该属性。

问题源于ViewModel类中的URL属性。您需要公开URL,否则主窗口无法访问属性:

视图模型:


希望这有帮助,让我知道如果你有任何问题

ObservationCollection已经有一个RaisePropertyChanged事件和CollectionChanged事件。@Dom true,但这只会通知他向集合中添加或从集合中删除的项。如果他想更改集合本身或任何项中的字段,那么他需要为其他项实现INotifyPropertyChanged行为。诚然,我的回答可能有点超出了他的具体问题,但在我的辩护中,我也提到了他需要公开收集财产,以便约束工作。
    namespace WpfApplication1
{

    public partial class MainWindow : Window
    {
        ViewModel model = new ViewModel();

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = model;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            model.GetUrls();
        }
    }
}
    namespace WpfApplication1
{
    class ViewModel
    {
        private ObservableCollection<Url> Urls { get; set; }

        public ViewModel()
        {
            Urls = new ObservableCollection<Url>();
        }

        public void GetUrls()
        {
            for (int i = 0; i < 5; i++)
            {
                Urls.Add(new Url { link = i.ToString() });
            }
        }
    }

    public class Url
    {
        public string link { get; set; }
    }
}
private string _link;
{
    public string link
    {
        get {return this._link;}
        set {this._link=value; RaisePropertyChanged(() => this.link); }
    }
}
namespace WpfApplication1
{
    public class ViewModel 
    {
        //make this public otherwise MainWindow will not have access to it!
        public ObservableCollection<Url> Urls { get; set; }

        public ViewModel()
        {
            Urls = new ObservableCollection<Url>();
        }

        public void GetUrls()
        {
            for (int i = 0; i < 5; i++)
            {
                Urls.Add(new Url { link = i.ToString() });
            }
        }
}

    public class Url
    {
         public string link { get; set; }
    }

}