Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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# 属性更改时,与控件的绑定不会更新_C#_Wpf_Xaml_Data Binding_Frameworkelement - Fatal编程技术网

C# 属性更改时,与控件的绑定不会更新

C# 属性更改时,与控件的绑定不会更新,c#,wpf,xaml,data-binding,frameworkelement,C#,Wpf,Xaml,Data Binding,Frameworkelement,我使用直接绑定到控件的绑定+IValueConverter来生成使用控件上的多个属性计算的结果。当控件上的属性更改时,是否有方法调用转换器 我知道可以使用IMultiValueConverter绑定到我想要的属性,但这会占用代码中的大量空间并中断流程 示例代码: main window.xaml 你好 MainWindow.xaml.cs 使用系统; 使用System.Collections.Generic; 利用制度全球化; 使用System.Linq; 使用系统文本; 使用System.

我使用直接绑定到控件的
绑定
+
IValueConverter
来生成使用控件上的多个属性计算的结果。当控件上的属性更改时,是否有方法调用转换器

我知道可以使用IMultiValueConverter绑定到我想要的属性,但这会占用代码中的大量空间并中断流程

示例代码:

main window.xaml


你好
MainWindow.xaml.cs

使用系统;
使用System.Collections.Generic;
利用制度全球化;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
命名空间绑定框架元素
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
B.宽度+=20;
}
}
公共类ElementConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
FrameworkElement=作为FrameworkElement的值;
return element.ActualWidth+element.ActualHeight;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
}

绑定到属性(只要它们是依赖属性)是简单的解决方案,以便了解发生了一些更改。
如果您想超越边界,您可以创建依赖属性侦听器,并在更改指定属性时发送一些消息,例如使用MVVM Light。然后,根据更改的DP,在任何需要更新某些数据的地方捕获此消息。不管怎样,我不会建议你采取这样的步骤

顺便说一句,您将绑定设置为Button,由于Button是UI元素,因此转换器将被调用一次,并且永远不会再次调用,请记住这一点。

创建另一个文件夹,将其命名为Converters,并将其全部放在派生IValueConverter或IMultiValueConverter的classess中。这样一个步骤可以使您获得明显的分离,而且您不会将代码隐藏文件与不相关的代码混在一起。

我知道,转换器将被调用一次,永远不会再调用,这就是我正在寻求解决方案的问题。