gpt4 book ai didi

c# - 只允许 OneWayToSource 绑定(bind)模式

转载 作者:行者123 更新时间:2023-11-30 23:29:09 26 4
gpt4 key购买 nike

我有 EntitiesUserControl 负责 EntitiesCount 依赖属性:

public static readonly DependencyProperty EntitiesCountProperty = DependencyProperty.Register(
nameof(EntitiesCount),
typeof(int),
typeof(EntitiesUserControl),
new FrameworkPropertyMetadata(1, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public int EntitiesCount
{
get { return (int)this.GetValue(EntitiesCountProperty); }
set { this.SetValue(EntitiesCountProperty, value); }
}

另一个(主要)控件包括 EntitiesUserControl 并通过绑定(bind)读取它的属性:

<controls:EntitiesUserControl EntitiesCount="{Binding CountOfEntities, Mode=OneWayToSource}" />

CountOfEntities View 模型中的属性仅存储和处理计数值的更改:

private int countOfEntities;
public int CountOfEntities
{
protected get { return this.countOfEntities; }
set
{
this.countOfEntities = value;
// Custom logic with new value...
}
}

我需要 EntitiesUserControlEntitiesCount 属性为只读(主控件不能更改它,只读)并且它可以这样工作方式只是因为 Mode=OneWayToSource 显式声明。但是,如果声明 TwoWay 模式或未显式声明模式,则 EntitiesCount 可以从外部重写(至少在绑定(bind)初始化之后,因为它发生在之后 已分配默认依赖属性值)。

由于绑定(bind)限制(最好在 answer 中描述),我不能执行“合法”的只读依赖属性,因此我需要防止与 OneWayToSource 以外的模式绑定(bind)。最好在 FrameworkPropertyMetadataOptions 中有一些 OnlyOneWayToSource 标志,例如 BindsTwoWayByDefault 值枚举...

有什么建议可以实现吗?

最佳答案

这有点“hacky”,但您可以创建一个 Binding 派生类并使用它代替 Binding:

[MarkupExtensionReturnType(typeof(OneWayToSourceBinding))]
public class OneWayToSourceBinding : Binding
{
public OneWayToSourceBinding()
{
Mode = BindingMode.OneWayToSource;
}

public OneWayToSourceBinding(string path) : base(path)
{
Mode = BindingMode.OneWayToSource;
}

public new BindingMode Mode
{
get { return BindingMode.OneWayToSource; }
set
{
if (value == BindingMode.OneWayToSource)
{
base.Mode = value;
}
}
}
}

在 XAML 中:

<controls:EntitiesUserControl EntitiesCount="{local:OneWayToSourceBinding CountOfEntities}" />

命名空间映射 local 可能适合您。

OneWayToSourceBindingMode 设置为 OneWayToSource 并防止将其设置为任何其他内容。

关于c# - 只允许 OneWayToSource 绑定(bind)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com