Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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
C# 使用自定义类在IronPython中设置列表框的ItemsSource_C#_Python_Wpf_Ironpython - Fatal编程技术网

C# 使用自定义类在IronPython中设置列表框的ItemsSource

C# 使用自定义类在IronPython中设置列表框的ItemsSource,c#,python,wpf,ironpython,C#,Python,Wpf,Ironpython,我的最终目标是将以下代码从C#转换为IronPython(源代码:): 但是,此代码在创建“self.users”对象时崩溃。我发现,如果我使用str初始化ObservaleCollection,并对XAML的Add函数和DisplayMemberPath的输入进行适当更改,代码运行良好,但我对使用自定义类感兴趣。从我在网上看到的各种文章来看,在IronPython中使用ItemsSources和ObservableCollection似乎没有达成共识,因此我希望有人能帮助我澄清我的问题所在 u

我的最终目标是将以下代码从C#转换为IronPython(源代码:):

但是,此代码在创建“self.users”对象时崩溃。我发现,如果我使用str初始化ObservaleCollection,并对XAML的Add函数和DisplayMemberPath的输入进行适当更改,代码运行良好,但我对使用自定义类感兴趣。从我在网上看到的各种文章来看,在IronPython中使用ItemsSources和ObservableCollection似乎没有达成共识,因此我希望有人能帮助我澄清我的问题所在

using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
{
    public partial class ChangeNotificationSample : Window
    {
        private List<User> users = new List<User>();

        public ChangeNotificationSample()
        {
            InitializeComponent();

            users.Add(new User() { Name = "John Doe" });
            users.Add(new User() { Name = "Jane Doe" });

            lbUsers.ItemsSource = users;
        }

        private void btnAddUser_Click(object sender, RoutedEventArgs e)
        {
            users.Add(new User() { Name = "New user" });
        }

        private void btnChangeUser_Click(object sender, RoutedEventArgs e)
        {
            if(lbUsers.SelectedItem != null)
                (lbUsers.SelectedItem as User).Name = "Random Name";
        }

        private void btnDeleteUser_Click(object sender, RoutedEventArgs e)
        {
            if(lbUsers.SelectedItem != null)
                users.Remove(lbUsers.SelectedItem as User);
        }
    }

    public class User
    {
        public string Name { get; set; }
    }
}
<ListBox Name="lbUsers" DisplayMemberPath="Name"></ListBox>
import wpf
from System import *
from System.Collections.Generic import *
from System.Windows import *
from System.Windows.Controls import *
from System.Windows.Data import *
from System.ComponentModel import *
from System.Collections.ObjectModel import *

from System.Windows import Application, Window

class NotifyPropertyChangedBase(INotifyPropertyChanged):
    PropertyChanged = None
    def __init__(self):
        (self.PropertyChanged, self._propertyChangedCaller) = make_event()

    def add_PropertyChanged(self, value):
        self.PropertyChanged += value

    def remove_PropertyChanged(self, value):
        self.PropertyChanged -= value

    def OnPropertyChanged(self, propertyName):
        self._propertyChangedCaller(self, PropertyChangedEventArgs(propertyName))


class User(NotifyPropertyChangedBase):

    @property
    def Name(self):
        return self._Name

    @Name.setter
    def Name(self, value):
        self._Name = value
        self.OnPropertyChanged("Name")





class MyWindow(Window):


    def __init__(self):
        wpf.LoadComponent(self, 'WpfApplication1.xaml')

        self.users = ObservableCollection[User]()

        temp = User()
        temp.Name = "Test"
        self.users.Add(temp)


        lbUsers.ItemsSource = users




if __name__ == '__main__':
    Application().Run(MyWindow())