【发布时间】:2017-01-12 14:10:12
【问题描述】:
如果我在附加属性中使用绑定扩展
<TextBlock local:MyBehavior.View="{Binding A}" /> <!-- or B -->
如何根据附加行为设置 ViewModel 的 A(或 B)属性值?
我不明白:
- 附加属性使用哪种类型?
Binding?BindingBase?BindingExpressionBase?object? - 我应该立即设置值吗?我要等一些活动吗?我是否应该使用另一个依赖属性来设置它的值,然后绑定到
SomeProperty并在设置DataContext后让绑定完成这项工作?
我的失败尝试是here,为方便起见,我将其复制在下面:
public class MyBehavior
{
public static BindingBase GetView(DependencyObject obj) => (BindingBase)obj.GetValue(ViewProperty);
public static void SetView(DependencyObject obj, BindingBase value) => obj.SetValue(ViewProperty, value);
public static readonly DependencyProperty ViewProperty =
DependencyProperty.RegisterAttached("View", typeof(BindingBase), typeof(MyBehavior), new PropertyMetadata(null, (d, e) =>
{
var element = d as FrameworkElement;
if (element == null)
throw new ArgumentException("Only used with FrameworkElement");
element.Loaded += (s, a) => GetView(element); // <<
}));
}
我不确定如何在标记行设置绑定属性给定的值:
public class ViewModel
{
public object A { get; set; }
public object B { get; set; }
}
【问题讨论】:
-
只是为了澄清你的问题:你想在绑定到
A属性的依赖属性的OnPropertyChanged回调中设置ViewModel的A属性吗?这没有任何意义。 -
@dymanoid,这就是我在这里的原因。我不确定如何使用附加属性来组织它。如果例如我会使用
bool并设置local:MyBehavior.View="True"- 然后这将导致回调运行,我可以在其中执行((ViewModel)element.DataContext).A = something之类的操作。现在我希望在 xaml 中定义A。因此具有约束力。还有这个没有意义的问题;)
标签: c# wpf binding attached-properties