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