Caliburn.Micro多元素自定义惯例(NumericUpDown.Value,NumericUpDown.Max



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

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

我正在尝试将NumericUpDown Value和Maximum绑定到相应的ViewModel属性。我可以用以下代码完成:

价值

ConventionManager.AddElementConvention<NumericUpDown>(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);
            };

然而,一个奇怪的部分来了,我只能让其中一个工作。这让我相信我在某个地方犯了一些愚蠢的错误。我似乎只能调用AddElementConvention,因此只执行最后一个调用。

我很感激这段代码的帮助,或者参考一些可以帮助我的好文档。

向致以最诚挚的问候

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

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

相关内容

  • 没有找到相关文章

最新更新