面试问题
问题描述:
如果出现属性名称冲突,您将如何在 XAML 绑定路径表达式中指定要绑定到的确切属性?
我迄今为止从未在任何绑定中遇到过此类(属性名称冲突)问题。通过一些阅读,我意识到,如果我绑定到一个已重写的属性,则可能会发生这种情况,因为就反射而言,我有两个此属性的实例(基类中的虚拟属性和派生类中的重写属性)。这是 XAML 使用的方式。
- 是否还有其他情况可能导致 XAML 遇到属性名称冲突?
- API 中是否有支持来处理/控制此问题?(而不是当然要避免冲突)
感谢您的关注。
面试问题
问题描述:
如果出现属性名称冲突,您将如何在 XAML 绑定路径表达式中指定要绑定到的确切属性?
我迄今为止从未在任何绑定中遇到过此类(属性名称冲突)问题。通过一些阅读,我意识到,如果我绑定到一个已重写的属性,则可能会发生这种情况,因为就反射而言,我有两个此属性的实例(基类中的虚拟属性和派生类中的重写属性)。这是 XAML 使用的方式。
感谢您的关注。
听起来对我来说完全是无意义的。除非他们想谈论绑定,使用像PriorityBinding
和MultiBinding
这样“不连贯”的资源。
坦率地说,我认为覆盖属性不能涉及此事,因为这太超出范围了,您可以同样指出显式接口实现和许多其他明显不属于WPF领域的事情。
<StackPanel Name="stack">
<StackPanel.Resources>
<loc:OverriddenMyPropertyConverter x:Key="BaseMyProperty"/>
</StackPanel.Resources>
<TextBox Text="{Binding Path=MyProperty}"/>
<TextBox Text="{Binding Mode=OneWay, Converter={StaticResource BaseMyProperty}}"/>
</StackPanel>
StackPanel的DataContext是MyClass类的一个实例。第一个TextBox绑定到MyClass.MyProperty属性,第二个TextBox将绑定到MyBaseClass.MyProperty属性。双向绑定会更加复杂,因为实际上绑定到第二个TextBox的对象是MyClass对象而不是MyProperty对象。
代码:
class MyClass : MyBaseClass
{
string myProperty = "overridden";
public new string MyProperty
{
get { return myProperty; }
set { myProperty = value; }
}
}
class MyBaseClass
{
string baseProperty = "base";
public string MyProperty
{
get { return baseProperty; }
set { baseProperty = value; }
}
}
class OverriddenMyPropertyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value as MyBaseClass).MyProperty;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}