gpt4 book ai didi

c# - Binding 没有 Clone 方法,复制它的有效方法是什么

转载 作者:可可西里 更新时间:2023-11-01 09:03:39 26 4
gpt4 key购买 nike

我想复制一个绑定(bind),这样我就可以在不影响原始绑定(bind)的情况下为其设置不同的源属性。这只是将新绑定(bind)的所有属性设置为与旧绑定(bind)相同的情况吗?

最佳答案

这是我对问题的解决方案:

public static BindingBase CloneBinding(BindingBase bindingBase, object source)
{
var binding = bindingBase as Binding;
if (binding != null)
{
var result = new Binding
{
Source = source,
AsyncState = binding.AsyncState,
BindingGroupName = binding.BindingGroupName,
BindsDirectlyToSource = binding.BindsDirectlyToSource,
Converter = binding.Converter,
ConverterCulture = binding.ConverterCulture,
ConverterParameter = binding.ConverterParameter,
//ElementName = binding.ElementName,
FallbackValue = binding.FallbackValue,
IsAsync = binding.IsAsync,
Mode = binding.Mode,
NotifyOnSourceUpdated = binding.NotifyOnSourceUpdated,
NotifyOnTargetUpdated = binding.NotifyOnTargetUpdated,
NotifyOnValidationError = binding.NotifyOnValidationError,
Path = binding.Path,
//RelativeSource = binding.RelativeSource,
StringFormat = binding.StringFormat,
TargetNullValue = binding.TargetNullValue,
UpdateSourceExceptionFilter = binding.UpdateSourceExceptionFilter,
UpdateSourceTrigger = binding.UpdateSourceTrigger,
ValidatesOnDataErrors = binding.ValidatesOnDataErrors,
ValidatesOnExceptions = binding.ValidatesOnExceptions,
XPath = binding.XPath,
};

foreach (var validationRule in binding.ValidationRules)
{
result.ValidationRules.Add(validationRule);
}

return result;
}

var multiBinding = bindingBase as MultiBinding;
if (multiBinding != null)
{
var result = new MultiBinding
{
BindingGroupName = multiBinding.BindingGroupName,
Converter = multiBinding.Converter,
ConverterCulture = multiBinding.ConverterCulture,
ConverterParameter = multiBinding.ConverterParameter,
FallbackValue = multiBinding.FallbackValue,
Mode = multiBinding.Mode,
NotifyOnSourceUpdated = multiBinding.NotifyOnSourceUpdated,
NotifyOnTargetUpdated = multiBinding.NotifyOnTargetUpdated,
NotifyOnValidationError = multiBinding.NotifyOnValidationError,
StringFormat = multiBinding.StringFormat,
TargetNullValue = multiBinding.TargetNullValue,
UpdateSourceExceptionFilter = multiBinding.UpdateSourceExceptionFilter,
UpdateSourceTrigger = multiBinding.UpdateSourceTrigger,
ValidatesOnDataErrors = multiBinding.ValidatesOnDataErrors,
ValidatesOnExceptions = multiBinding.ValidatesOnDataErrors,
};

foreach (var validationRule in multiBinding.ValidationRules)
{
result.ValidationRules.Add(validationRule);
}

foreach (var childBinding in multiBinding.Bindings)
{
result.Bindings.Add(CloneBinding(childBinding, source));
}

return result;
}

var priorityBinding = bindingBase as PriorityBinding;
if (priorityBinding != null)
{
var result = new PriorityBinding
{
BindingGroupName = priorityBinding.BindingGroupName,
FallbackValue = priorityBinding.FallbackValue,
StringFormat = priorityBinding.StringFormat,
TargetNullValue = priorityBinding.TargetNullValue,
};

foreach (var childBinding in priorityBinding.Bindings)
{
result.Bindings.Add(CloneBinding(childBinding, source));
}

return result;
}

throw new NotSupportedException("Failed to clone binding");
}

关于c# - Binding 没有 Clone 方法,复制它的有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com