将一个对象从主窗口传递给一个CustomClass

本文关键字:CustomClass 一个 一个对象 窗口 | 更新日期: 2023-09-27 17:52:38

如何将对象从MainWindow.xaml.cs传递到MyClass.cs ?

- MainWindow.xaml
    MainWindow.xaml.cs
- MyClass.cs
- Building.cs

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var b = new Building();
        b.Name = "My Building";
    }
}

XAML:

<Window x:Class="CustomClasses.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:customclasses="clr-namespace:CustomClasses"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="150"></RowDefinition>
        </Grid.RowDefinitions>
        <customclasses:MyClass x:Name="myClass">
        </customclasses:MyClass>
        <StackPanel Grid.Row="1">
        </StackPanel>
    </Grid>
</Window>

将一个对象从主窗口传递给一个CustomClass

如果你只对一个对象感兴趣,你可以在MyClass中声明Dependency Property,并可以通过XAML绑定。

public class MyClass : Border
{
    public Building MyBuilding
    {
        get { return (Building)GetValue(MyBuildingProperty); }
        set { SetValue(MyBuildingProperty, value); }
    }
    public static readonly DependencyProperty MyBuildingProperty =
        DependencyProperty.Register("MyBuilding", typeof(Building),
                                     typeof(MyClass));
}

和在MainWindow中,你必须声明Building类型的属性:

public Building MyBuilding { get; set;}
public MainWindow()
{
    InitializeComponent();
    DataContext = this;
    MyBuilding = new Building();
    b.Name = "My Building";
}

如果MyBuilding可以在应用程序执行时更改,请确保在MainWindow类上实现INotifyPropertyChanged,并且每当MyBuilding设置时都会引发属性更改事件。

XAML

<customclasses:MyClass x:Name="myClass" MyBuilding="{Binding MyBuilding}"/>

您可以在后面的代码中指定MyClass的属性:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        var b = new Building();
        b.Name = "My Building";
        myClass.MyBuilding = b;
    }
}
class MyClass
{
    public Building MyBuilding {get; set;}
}
相关文章: