- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试以 OneWayToSource
作为模式绑定(bind)到 Readonly
属性,但似乎无法在 XAML 中完成:
<controls:FlagThingy IsModified="{Binding FlagIsModified,
ElementName=container,
Mode=OneWayToSource}" />
我得到:
The property 'FlagThingy.IsModified' cannot be set because it does not have an accessible set accessor.
IsModified
是 FlagThingy
上的只读 DependencyProperty
。我想将该值绑定(bind)到容器上的 FlagIsModified
属性。
需要明确的是:
FlagThingy.IsModified --> container.FlagIsModified
------ READONLY ----- ----- READWRITE --------
仅使用 XAML 可以吗?
<小时/>更新:嗯,我通过在容器上而不是在 FlagThingy
上设置绑定(bind)来解决此问题。但我还是想知道这是否可能。
最佳答案
OneWayToSource 的一些研究结果...
选项#1。
// Control definition
public partial class FlagThingy : UserControl
{
public static readonly DependencyProperty IsModifiedProperty =
DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Binding binding = new Binding();
binding.Path = new PropertyPath("FlagIsModified");
binding.ElementName = "container";
binding.Mode = BindingMode.OneWayToSource;
_flagThingy.SetBinding(FlagThingy.IsModifiedProperty, binding);
选项#2
// Control definition
public partial class FlagThingy : UserControl
{
public static readonly DependencyProperty IsModifiedProperty =
DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
public bool IsModified
{
get { return (bool)GetValue(IsModifiedProperty); }
set { throw new Exception("An attempt ot modify Read-Only property"); }
}
}
<controls:FlagThingy IsModified="{Binding Path=FlagIsModified,
ElementName=container, Mode=OneWayToSource}" />
选项#3(真正的只读依赖属性)
System.ArgumentException:“IsModified”属性无法进行数据绑定(bind)。
// Control definition
public partial class FlagThingy : UserControl
{
private static readonly DependencyPropertyKey IsModifiedKey =
DependencyProperty.RegisterReadOnly("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
public static readonly DependencyProperty IsModifiedProperty =
IsModifiedKey.DependencyProperty;
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Same binding code...
Reflector 给出了答案:
internal static BindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, Binding binding, BindingExpressionBase parent)
{
FrameworkPropertyMetadata fwMetaData = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;
if (((fwMetaData != null) && !fwMetaData.IsDataBindingAllowed) || dp.ReadOnly)
{
throw new ArgumentException(System.Windows.SR.Get(System.Windows.SRID.PropertyNotBindable, new object[] { dp.Name }), "dp");
}
....
关于wpf - 来自 XAML 中只读属性的 OneWayToSource 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658170/
我正在使用 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 中显示的文
我是一名优秀的程序员,十分优秀!