[X] inherit DataType based on attribute (#25173)
Change the heuristic for deciding if we need ot ignore parent DataType, as DataTrigger.Binding shoud inherit it, and Picker.ItemDisplayNameBinding should not this is an alternate fix for #23989, partially replaces #24513, and will help fixing #25141 together with #24152
This commit is contained in:
Родитель
09f51e08f9
Коммит
028cd0c065
|
@ -8,6 +8,7 @@ using System.Linq;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Maui.Controls.Internals;
|
using Microsoft.Maui.Controls.Internals;
|
||||||
|
using Microsoft.Maui.Controls.Xaml;
|
||||||
using Microsoft.Maui.Controls.Xaml.Diagnostics;
|
using Microsoft.Maui.Controls.Xaml.Diagnostics;
|
||||||
using Microsoft.Maui.Devices;
|
using Microsoft.Maui.Devices;
|
||||||
using Microsoft.Maui.Graphics;
|
using Microsoft.Maui.Graphics;
|
||||||
|
@ -151,6 +152,7 @@ namespace Microsoft.Maui.Controls
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <include file="../../docs/Microsoft.Maui.Controls/ListView.xml" path="//Member[@MemberName='GroupDisplayBinding']/Docs/*" />
|
/// <include file="../../docs/Microsoft.Maui.Controls/ListView.xml" path="//Member[@MemberName='GroupDisplayBinding']/Docs/*" />
|
||||||
|
[DoesNotInheritDataType]
|
||||||
public BindingBase GroupDisplayBinding
|
public BindingBase GroupDisplayBinding
|
||||||
{
|
{
|
||||||
get { return _groupDisplayBinding; }
|
get { return _groupDisplayBinding; }
|
||||||
|
@ -176,6 +178,7 @@ namespace Microsoft.Maui.Controls
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <include file="../../docs/Microsoft.Maui.Controls/ListView.xml" path="//Member[@MemberName='GroupShortNameBinding']/Docs/*" />
|
/// <include file="../../docs/Microsoft.Maui.Controls/ListView.xml" path="//Member[@MemberName='GroupShortNameBinding']/Docs/*" />
|
||||||
|
[DoesNotInheritDataType]
|
||||||
public BindingBase GroupShortNameBinding
|
public BindingBase GroupShortNameBinding
|
||||||
{
|
{
|
||||||
get { return _groupShortNameBinding; }
|
get { return _groupShortNameBinding; }
|
||||||
|
|
|
@ -7,6 +7,7 @@ using System.Collections.Specialized;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using Microsoft.Maui.Controls.Internals;
|
using Microsoft.Maui.Controls.Internals;
|
||||||
|
using Microsoft.Maui.Controls.Xaml;
|
||||||
using Microsoft.Maui.Graphics;
|
using Microsoft.Maui.Graphics;
|
||||||
|
|
||||||
namespace Microsoft.Maui.Controls
|
namespace Microsoft.Maui.Controls
|
||||||
|
@ -199,6 +200,7 @@ namespace Microsoft.Maui.Controls
|
||||||
|
|
||||||
BindingBase _itemDisplayBinding;
|
BindingBase _itemDisplayBinding;
|
||||||
/// <include file="../../docs/Microsoft.Maui.Controls/Picker.xml" path="//Member[@MemberName='ItemDisplayBinding']/Docs/*" />
|
/// <include file="../../docs/Microsoft.Maui.Controls/Picker.xml" path="//Member[@MemberName='ItemDisplayBinding']/Docs/*" />
|
||||||
|
[DoesNotInheritDataType]
|
||||||
public BindingBase ItemDisplayBinding
|
public BindingBase ItemDisplayBinding
|
||||||
{
|
{
|
||||||
get { return _itemDisplayBinding; }
|
get { return _itemDisplayBinding; }
|
||||||
|
|
|
@ -9,6 +9,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Cadenza.Collections;
|
using Cadenza.Collections;
|
||||||
using Microsoft.Maui.Controls.Internals;
|
using Microsoft.Maui.Controls.Internals;
|
||||||
|
using Microsoft.Maui.Controls.Xaml;
|
||||||
using Microsoft.Maui.Devices;
|
using Microsoft.Maui.Devices;
|
||||||
|
|
||||||
namespace Microsoft.Maui.Controls.Internals
|
namespace Microsoft.Maui.Controls.Internals
|
||||||
|
@ -100,6 +101,7 @@ namespace Microsoft.Maui.Controls.Internals
|
||||||
remove { PropertyChanged -= value; }
|
remove { PropertyChanged -= value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DoesNotInheritDataType]
|
||||||
public BindingBase GroupDisplayBinding
|
public BindingBase GroupDisplayBinding
|
||||||
{
|
{
|
||||||
get { return _groupDisplayBinding; }
|
get { return _groupDisplayBinding; }
|
||||||
|
@ -133,6 +135,7 @@ namespace Microsoft.Maui.Controls.Internals
|
||||||
|
|
||||||
public BindableProperty GroupHeaderTemplateProperty { get; set; }
|
public BindableProperty GroupHeaderTemplateProperty { get; set; }
|
||||||
|
|
||||||
|
[DoesNotInheritDataType]
|
||||||
public BindingBase GroupShortNameBinding
|
public BindingBase GroupShortNameBinding
|
||||||
{
|
{
|
||||||
get { return _groupShortNameBinding; }
|
get { return _groupShortNameBinding; }
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#nullable disable
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.Maui.Controls.Xaml
|
||||||
|
{
|
||||||
|
internal class DoesNotInheritDataTypeAttribute : Attribute
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -324,7 +324,7 @@ namespace Microsoft.Maui.Controls.Xaml.Internals
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsBindingBaseProperty(IElementNode node, HydrationContext context)
|
static bool DoesNotInheritDataType(IElementNode node, HydrationContext context)
|
||||||
{
|
{
|
||||||
if ( node.TryGetPropertyName(node.Parent, out XmlName name)
|
if ( node.TryGetPropertyName(node.Parent, out XmlName name)
|
||||||
&& node.Parent is IElementNode parent
|
&& node.Parent is IElementNode parent
|
||||||
|
@ -332,9 +332,9 @@ namespace Microsoft.Maui.Controls.Xaml.Internals
|
||||||
new XmlLineInfo(((IXmlLineInfo)node).LineNumber, ((IXmlLineInfo)node).LinePosition),
|
new XmlLineInfo(((IXmlLineInfo)node).LineNumber, ((IXmlLineInfo)node).LinePosition),
|
||||||
context.RootElement.GetType().Assembly, out var xpe) is Type parentType
|
context.RootElement.GetType().Assembly, out var xpe) is Type parentType
|
||||||
&& parentType.GetRuntimeProperties().FirstOrDefault(p => p.Name == name.LocalName) is PropertyInfo propertyInfo
|
&& parentType.GetRuntimeProperties().FirstOrDefault(p => p.Name == name.LocalName) is PropertyInfo propertyInfo
|
||||||
&& propertyInfo.PropertyType == typeof(BindingBase))
|
&& propertyInfo.CustomAttributes.Any(ca => ca.AttributeType == typeof(DoesNotInheritDataTypeAttribute)))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -360,7 +360,7 @@ namespace Microsoft.Maui.Controls.Xaml.Internals
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (IsBindingBaseProperty(n, context))
|
if (DoesNotInheritDataType(n, context))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче