- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 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...
}
}
我需要 EntitiesUserControl
的 EntitiesCount
属性为只读(主控件不能更改它,只读)并且它可以这样工作方式只是因为 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
可能适合您。
此 OneWayToSourceBinding
将 Mode
设置为 OneWayToSource
并防止将其设置为任何其他内容。
关于c# - 只允许 OneWayToSource 绑定(bind)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634609/
我正在使用 OneWayToSource绑定(bind),它似乎总是将我的源属性设置为空。为什么呢?这给我带来了麻烦,因为我需要源属性中目标属性的值而不是空值。 这是我的代码: MyViewModel
我有一个 RadioButton其 IsChecked 的元素属性绑定(bind)到 MyProperty在 ViewModel . Binding有模式OneWayToSource由于某些原因,它会
为什么 OneWayToSource 绑定(bind)会重置我的目标值?这是绑定(bind)代码: SolidColorBrush brush = GetTemplateChild("PART_Pre
我最近用 Binding Mode = OneWayToSource 做了很多测试,但我仍然不知道为什么会发生某些事情。 例如,我在类构造函数中为 dependency property 设置了一个值
我有一个自定义控件,它具有以下依赖属性 public static readonly DependencyProperty PrintCommandProperty = DependencyPrope
我有 EntitiesUserControl 负责 EntitiesCount 依赖属性: public static readonly DependencyProperty EntitiesCoun
是否可以在我的模型中使用 OneWay 模式将 TextBox Text 字段绑定(bind)到属性 TextView,并绑定(bind)到另一个属性 TextInput 模式为 OneWayToSo
我需要编写一个看起来像 TextBox 的自定义控件,它包含一个名为 Refresh() 的方法,其主要目的是清除文本并回滚一些其他值。 该方法应以某种方式变得可绑定(bind),以便其他人可以将其
我在一个窗口中有一个 TextBox,我使用以下简单的转换器将其绑定(bind)到一个值: public class TestConverter : MarkupExtension, IValueCo
我正在尝试以 OneWayToSource 作为模式绑定(bind)到 Readonly 属性,但似乎无法在 XAML 中完成: 我得到: The property 'FlagThingy.IsMo
我有一个只读属性,需要在文本框中显示,并在运行时收到此错误。我设置了 IsEnabled="False"、IsReadOnly="True" - 没有运气。其他搜索说只读应该修复它,但不适合我。我有一
我正在使用 MVVM 模式并在运行我的应用程序时收到以下信息 无效操作异常TwoWay 或 OneWayToSource 绑定(bind)无法对“ViewModel.SynergyViewModel”
我对特定的 xaml 数据绑定(bind)有疑问。我有两个列表框(主要细节,所以列表框将 IsSynchronizedWithCurrentItem 设置为 true)。我希望我的 View 模型知道
当我设置目标控件的 DataContext 时,我有一个 OneWayToSource 绑定(bind),其行为不符合我的预期。源的属性被设置为默认值,而不是目标控件的属性值。 我在标准 WPF 窗口
我最近在代码中将 OneWayToSource 绑定(bind)添加到 View 模型中的只读属性。当时我不知道 .Net 4 的变化,当没有 getter 时这会导致异常: ... public
我有这个 xaml 文本框 绑定(bind)到这个属性: public double? Min { get { return min; }
OneWayToSource .NET 4.0 中的绑定(bind)似乎已损坏 我有这个简单的 Xaml 我的代码是这样的 public MainWindow() {
以下出现在数据模板中: 设置SelectedIndex 后(如上所示),绑定(bind)到Value 的OneWayToSource 不起作用。如果我不设置 SelectedIndex,则可以绑定(
我有一个绑定(bind)到 People 集合的 DataGrid。我还有一个 TextBox,它应该接受所选行中的 Name 值。然后用户可以编辑该值或保留原样。关键点是:TextBox 中显示的文
我是一名优秀的程序员,十分优秀!