gpt4 book ai didi

wpf - 多重绑定(bind) ConvertBack 未将正确的值传递给源?

转载 作者:行者123 更新时间:2023-12-03 02:03:37 39 4
gpt4 key购买 nike

有一个非常奇怪的问题让我很困惑。就像下面的代码一样,我创建了一个 [Button] 并将其 [Canvas.LeftProperty] 多重绑定(bind)到 [Entity.X] 和 [Entity.Z]。 [Entity] 类已实现 [INotifyPropertyChaned]。

它在 Convert() 方法中运行良好,[Entity.X] 和 [Entity.Z] 正确传递给 [Canvas.LeftProperty]。

但问题是:当我使用 Canvas.SetLeft() 方法更改 [Button] 的位置时,ConvertBack() 方法被触发,但正确的值没有传递给 [Entity],[value [Entity.X] 的 set 部分中的 ] 似乎一直是旧的。

PS:我发现了一个类似的问题,但也没有解决..:(

类似问题:http://social.msdn.microsoft.com/Forums/zh-CN/wpf/thread/88B1134B-1DAA-4A54-94ED-BD724724D1EF

xaml:

<Canvas>
<Button x:Name="btnTest">
<Canvas>

绑定(bind)代码:

private void Binding()
{
var enity=DataContext as Entity;
var multiBinding=new MutiBinding();
multiBinding.Mode=BindingMode.TwoWay;
multiBinding.Converter=new LocationConverter();
multiBinding.Bindings.Add(new Binding("X"));
multiBinding.Bindings.Add(new Binding("Z"));
btnTest.SetBinding(Canvas.LeftProperty,multiBinding);
}

转换器:

public class LocationConverter: IMultiValueConverter
{
public object Convert(object[] values, TypetargetType,object parameter, CultureInfo culture)
{
return (double)values[0]*(double)values[1];
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return new object[]{ (double)value,Binding.DoNoting};//!!value here is correct
}
}

实体:

public class Entity:INotifyPropertyChanged
{
private double x=0d;
private double z=0d;

public double X
{
get{ return x;}
set{
x=value;//!!value here is not correctly passed
CallPropertyChanged("X");}
}

public double Z
{
get{ return z;}
set{
z=value;//!!value here is not correctly passed
CallPropertyChanged("Z");}
}
}

public event PropertyChangedEventHandler PropertyChanged;

private void CallPropertyChanged(String info)
{
if(PropertyChanged!=null)
PropertyChanged(this,new PropertyChangedEventArgs(info));
}
}
<小时/>

最佳答案

您需要在 MultiBinding 中指定要在 ConvertBack 方法中使用的每个 Binding 的绑定(bind)模式。因此,对于您在上面发布的代码,对“绑定(bind)代码”进行以下更改应该可以解决您的问题:

private void Binding()
{
var enity=DataContext as Entity;
var multiBinding=new MutiBinding();
multiBinding.Mode=BindingMode.TwoWay;
multiBinding.Converter=new LocationConverter();
multiBinding.Bindings.Add(new Binding("X"){Mode = BindingMode.TwoWay});
multiBinding.Bindings.Add(new Binding("Z"));
btnTest.SetBinding(Canvas.LeftProperty,multiBinding);
}

关于wpf - 多重绑定(bind) ConvertBack 未将正确的值传递给源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16805519/

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