Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/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
Caliburn.Micro多元素自定义约定(NumericUpDown.Value、NumericUpDown.Maximum)_Caliburn.micro_Mahapps.metro - Fatal编程技术网

Caliburn.Micro多元素自定义约定(NumericUpDown.Value、NumericUpDown.Maximum)

Caliburn.Micro多元素自定义约定(NumericUpDown.Value、NumericUpDown.Maximum),caliburn.micro,mahapps.metro,Caliburn.micro,Mahapps.metro,我一直在搞CM惯例,试图了解它们是如何工作的,但我还没有找到一篇像样的文章来解释一步一步的如何以及为什么 然而,我发现了一些我一直在使用的代码片段,并取得了一些成功。 然而,在这种情况下,我不明白发生了什么 我正在尝试将NumericUpDown值和最大值绑定到相应的ViewModel属性。我可以使用以下代码完成此操作: 价值观 ConventionManager.AddElementConvention(NumericUpDown.ValueProperty,“Value”,“ValueCha

我一直在搞CM惯例,试图了解它们是如何工作的,但我还没有找到一篇像样的文章来解释一步一步的如何以及为什么

然而,我发现了一些我一直在使用的代码片段,并取得了一些成功。 然而,在这种情况下,我不明白发生了什么

我正在尝试将NumericUpDown值和最大值绑定到相应的ViewModel属性。我可以使用以下代码完成此操作:

价值观

ConventionManager.AddElementConvention(NumericUpDown.ValueProperty,“Value”,“ValueChanged”);
最大值

            ConventionManager.AddElementConvention<NumericUpDown>(NumericUpDown.MaximumProperty, "Maximum", "MaximumChanged");
        var baseBindProperties = ViewModelBinder.BindProperties;
        ViewModelBinder.BindProperties =
            (frameWorkElements, viewModels) =>
            {
                foreach (var frameworkElement in frameWorkElements)
                {
                    var propertyName = frameworkElement.Name + "Max";
                    var property = viewModels.GetPropertyCaseInsensitive(propertyName);
                    if (property != null)
                    {
                        var convention = ConventionManager.GetElementConvention(typeof(NumericUpDown));

                        ConventionManager.SetBindingWithoutBindingOverwrite(
                            viewModels,
                            propertyName,
                            property,
                            frameworkElement,
                            convention,
                            convention.GetBindableProperty(frameworkElement));
                    }
                }
                return baseBindProperties(frameWorkElements, viewModels);
            };
ConventionManager.AddElementConvention(NumericUpDown.MaximumProperty,“最大”、“最大更改”);
var baseBindProperties=ViewModelBinder.BindProperties;
ViewModelBinder.BindProperties=
(框架元素、视图模型)=>
{
foreach(frameWorkElements中的var frameworkElement)
{
var propertyName=frameworkElement.Name+“Max”;
var property=viewModels.getPropertyCaseSensitive(propertyName);
if(属性!=null)
{
var convention=ConventionManager.GetElementConvention(typeof(NumericUpDown));
ConventionManager.SetBindingWithoutBindingOverwrite(
视图模型,
propertyName,
财产,,
框架元素,
公约,
GetBindableProperty(frameworkElement));
}
}
返回baseBindProperties(框架元素、视图模型);
};
然而,奇怪的是,我只能让其中一个发挥作用。这让我相信我在某个地方犯了错误。似乎我只能调用AddElementConvention,因此只能执行最后一个调用

我将非常感谢您对这段代码的帮助,或者对一些好的文档的参考,这些文档可以帮助我完成这段代码


致以最诚挚的问候

我在某处发现CM只允许每个项目有一个约定,所以这就是这种行为的原因


然而,由于像ComboBox这样的项目允许绑定多个属性(SelectedItem、ItemSource等…),我不确信…

我也遇到了这样的情况:想要不透明度,启用,等等。绑定在网格上。调试约定时,GetBindableProperty(frameworkElement)仅显示一个属性“可见性”。
            ConventionManager.AddElementConvention<NumericUpDown>(NumericUpDown.MaximumProperty, "Maximum", "MaximumChanged");
        var baseBindProperties = ViewModelBinder.BindProperties;
        ViewModelBinder.BindProperties =
            (frameWorkElements, viewModels) =>
            {
                foreach (var frameworkElement in frameWorkElements)
                {
                    var propertyName = frameworkElement.Name + "Max";
                    var property = viewModels.GetPropertyCaseInsensitive(propertyName);
                    if (property != null)
                    {
                        var convention = ConventionManager.GetElementConvention(typeof(NumericUpDown));

                        ConventionManager.SetBindingWithoutBindingOverwrite(
                            viewModels,
                            propertyName,
                            property,
                            frameworkElement,
                            convention,
                            convention.GetBindableProperty(frameworkElement));
                    }
                }
                return baseBindProperties(frameWorkElements, viewModels);
            };