问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#WPF怎么将一个控件与自定义结构体属性关联?

发布网友 发布时间:2022-04-26 23:31

我来回答

2个回答

热心网友 时间:2022-04-27 15:04


private double x;

        public double X {
get { return x; }
set {
x = value;
set();//每次赋值时都调用 set()
}
}

        private double y;

        public double Y {
get { return y; }
set {
y = value;
set();//每次赋值时都调用 set()
}
}

private double z;

        public double Z {
get { return z; }
set {
z = value;
set();//每次赋值时都调用 set()
}
}


在属性中,每次赋值(调用 set)时,都调用一次 set() 就好了

追问这个没问题。我没说清楚,不好意思哈,嗯。现在的问题是x. y. z是一个类。。然后room是另一个类里面的以xyz这个类为类型的自定义结构体变量。所以绑定的时候只触发了xyz的set。没有触发room的set

热心网友 时间:2022-04-27 16:22

给你写个示例吧

MainWindow.xaml

<Window

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfTest"

        xmlns:Properties="clr-namespace:WpfTest.Properties" x:Class="WpfTest.MainWindow"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <Grid Margin="0,0,0,0">

        <Label Content="X" HorizontalAlignment="Left" Margin="20,14,0,0" VerticalAlignment="Top"/>

        <Label Content="Y" HorizontalAlignment="Left" Margin="20,43,0,0" VerticalAlignment="Top"/>

        <Label Content="Z" HorizontalAlignment="Left" Margin="21,75,0,0" VerticalAlignment="Top"/>

        <!--重点是UpdateSourceTrigger=PropertyChanged, Mode=TwoWay-->

        <TextBox Name="textBox_X" Text="{Binding X, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" HorizontalAlignment="Left" Height="23" Margin="45,14,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

        <TextBox Name="textBox_Y" Text="{Binding Y, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" HorizontalAlignment="Left" Height="23" Margin="45,45,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

        <TextBox Name="textBox_Z" Text="{Binding Z, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" HorizontalAlignment="Left" Height="23" Margin="45,76,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" IsEnabled="False"/>

    </Grid>

</Window>

MainWindow.xaml.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.ComponentModel;//INotifyPropertyChanged

using System.Threading.Tasks;


namespace WpfTest

{

    /// <summary>

    /// MainWindow.xaml 的交互逻辑

    /// </summary>

    public partial class MainWindow : Window

    {

        private Room room = new Room();


        public MainWindow()

        {

            InitializeComponent();


            this.textBox_X.DataContext = room;

            this.textBox_Y.DataContext = room;

            this.textBox_Z.DataContext = room;

        }

    }


    public class Room : DependencyObject

    {

        public int X

        {

            get { return (int)GetValue(XProperty); }

            set {

                SetValue(XProperty, value);

                Console.WriteLine("set X={0}", value);

            }

        }


        public int Y

        {

            get { return (int)GetValue(YProperty); }

            set

            {

                SetValue(YProperty, value);

                Console.WriteLine("set Y={0}", value);

            }

        }


        public int Z

        {

            get { return (int)GetValue(ZProperty); }

            set

            {

                SetValue(ZProperty, value);

                Console.WriteLine("set Z={0}", value);

            }

        }


        // UI控件的值变化时回调

        private static void OnPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)

        {

            Room room = d as Room;

            switch (e.Property.Name)

            {

                case "X": room.X = (int)e.NewValue; break;

                case "Y": room.Y = (int)e.NewValue; break;

                case "Z": room.Z = (int)e.NewValue; break;

            }

        }


        public static readonly DependencyProperty XProperty =

        DependencyProperty.Register(

            "X",

            typeof(int),

            typeof(Room),

            new PropertyMetadata(0, OnPropertyChangedCallback, null)

        );


        public static readonly DependencyProperty YProperty =

        DependencyProperty.Register(

            "Y",

            typeof(int),

            typeof(Room),

            new PropertyMetadata(0, OnPropertyChangedCallback, null)

        );


        public static readonly DependencyProperty ZProperty =

        DependencyProperty.Register(

            "Z",

            typeof(int),

            typeof(Room),

            new PropertyMetadata(0, OnPropertyChangedCallback, null)

        );

    }

}

示例原文及运行效果参见我的博客 WPF—数据双向绑定

追问这个没问题。我没说清楚,不好意思哈,嗯。现在的问题是x. y. z是一个类。。然后room是另一个类里面的以xyz这个类为类型的自定义结构体变量。所以绑定的时候只触发了xyz的set。没有触发room的set

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求电脑玩安卓游戏的方法。步骤。以及所有的文件~谢谢 。有的联系我~ 我在电脑管家软件管理下的鹰击长空2都是解压包 澳洲留学读研申请攻略 澳洲留学申请时间是什么时候 去澳大利亚上大学需要什么手续 澳洲留学申请流程时间如何? 中南财经政法大学保险精算专业介绍 黄福记小吃梅干菜扣肉饼怎么样 如何开一家梅干菜扣肉饼店,成本要多少 在照明行业LED配光曲线图怎么看 WPF学习 如何自定义WPF布局面板 c# 在WPF中 如何自定义控件位置 WPF,自定义控件或自带控件,要在八个位置(或4个角落)拉动改变尺寸,是怎 ... WPF 自定义控件dragdrop ,当主窗口有多个这个自定义控件的时候,怎么获取,拖动的是哪一个 wpf中我自定义了一个自定义控件,add到了界面,如何设置显示在最底层?后台代码如何控制? WPF 自定义控件样式:如tabcontrol等!越多越好! WPF,有一个自定义控件,控件本身又由几个控件组成,我现在想得到控件内部的某个控件该怎么办? wpf 自定义控件(CustomControl),用户控件(userControl)的区别及继承方法 WPF 如何创建自己的WPF自定义控件库 C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随... 如何自定义一个wpf控件并且用于windows窗口程序中? WPF,怎么使用自定义控件 请问残疾人合适那个直播? 谁知道快手上有个聋哑人叫小哑巴 他儿子叫顺顺 求他ID 谢谢 残疾人一年在快手刷了十多万可以要回吗 快手辱骂残疾人需要什么证据? 快手里普通人很少有人关注和点赞。只有特别优秀的人或者残疾人才会得到更多人的关注和赞不知道大家发? 你好!我是聋人,快手有聋人,我想模仿他学手语可以吗? 为什么有那么多聋哑人?是什么原因造成的? 为什么现在那么多所谓的聋哑人在大街上用手语沟通,肯德基之类的地方都是他们的人。 有没有传奇可以回收元宝的游戏 手机版的和竖版的 中专毕业生怎么才能进修全日制大专? 在昔阳县进修学校函授大专学历怎么办理 我是高中毕业生,出来好几年了,想进修大专文凭 我现在是计算机毕业(中转学历)怎么进修大专? 有没有什么学校提供下! 我是初中的学历想进修大专可不可能 我中专怎么进修大专 社会青年怎么报考大专? 中专往届生如何报考大专? 5年制大专生(高职)如何进修? 中专毕业生怎样报考大专 我07年中专毕业的,我要怎么样进修大专? 本人目前迫切想要进修大专学历,却不太清楚报成教、自考、电大、还是找培训机构好?不知道怎么选择了。 无线路由器会影响手机的信号么? 主板不能检测cpu温度怎么解决 鲁大师怎么检测不出主板的温度呢 笔记本电脑,为什么鲁大师不显示主板温度和风扇转速 鲁大师检测不到笔记本主板温度 我的电脑用鲁大师为什么检测不到主板的温度? 鲁大师怎么不显示主板温度