Wpf 如何绑定自定义类型对象和控件?
我有一个自定义类型的对象数组。我有一个与这些对象相关的按钮数组。我想通过点击任何物体的按钮来改变它。所以按钮必须“知道”它们的对象。对象必须“知道”它们的按钮。如何将它们彼此绑定(一个对象只绑定一个按钮,反之亦然) 此外,它必须是C#代码,而不是XAML,因为我将以友好的方式构造这些数组 例如。存在包含单元格对象的映射对象(VM表示视图模型):Wpf 如何绑定自定义类型对象和控件?,wpf,binding,Wpf,Binding,我有一个自定义类型的对象数组。我有一个与这些对象相关的按钮数组。我想通过点击任何物体的按钮来改变它。所以按钮必须“知道”它们的对象。对象必须“知道”它们的按钮。如何将它们彼此绑定(一个对象只绑定一个按钮,反之亦然) 此外,它必须是C#代码,而不是XAML,因为我将以友好的方式构造这些数组 例如。存在包含单元格对象的映射对象(VM表示视图模型): 每个单元格必须显示为一个按钮。因此,用户只需单击特定按钮即可更改任何单元格对象的IsPassable属性。我不确定您到目前为止是如何意识到您的问题的,因
每个单元格必须显示为一个按钮。因此,用户只需单击特定按钮即可更改任何单元格对象的IsPassable属性。我不确定您到目前为止是如何意识到您的问题的,因此我可以给您一个我将如何设计它的示例。当您想要显示自定义对象的列表时,我将使用
ItemsControl
来显示它们,并在每个自定义对象上使用一个命令,该命令由XAML触发。这仍然会给你机会用代码处理一切。以下是一个示例:
自定义对象
public class CustomObject
{
public ICommand DoSomethingCommand { get; private set; }
public CustomObject()
{
DoSomethingCommand = new DelegateCommand(DoSomething);
}
private void DoSomething(object obj)
{
// TODO: do something
}
}
如果您尚未使用DelegateCommand
的实现,请在Prism中查看它的源代码(或其他任何地方,都有很多示例)
主窗口(XAML的一部分)
主窗口(代码隐藏)
公共部分类主窗口:窗口
{
私有ObservableCollection\u customObjects;
公共主窗口()
{
初始化组件();
_customObjects=新的ObservableCollection();
加载+=主窗口加载;
}
private void MainWindowLoaded(对象发送器,路由目标)
{
itemsControl.ItemsSource=\u customObjects;
_添加(新的CustomObject());
}
}
就这样。每次单击按钮时,都会执行方法
DoSomething
。请提供一个代码示例和有关您迄今为止尝试过的方法的更多信息。
public class CustomObject
{
public ICommand DoSomethingCommand { get; private set; }
public CustomObject()
{
DoSomethingCommand = new DelegateCommand(DoSomething);
}
private void DoSomething(object obj)
{
// TODO: do something
}
}
<ItemsControl x:Name="itemsControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="Do Something" Command="{Binding DoSomethingCommand}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
public partial class MainWindow : Window
{
private ObservableCollection<CustomObject> _customObjects;
public MainWindow()
{
InitializeComponent();
_customObjects = new ObservableCollection<CustomObject>();
Loaded += MainWindowLoaded;
}
private void MainWindowLoaded(object sender, RoutedEventArgs e)
{
itemsControl.ItemsSource = _customObjects;
_customObjects.Add(new CustomObject());
}
}