WPF,这个双向的MultiBinding绑定,反向为什么不见效

代码66 2013-12-04 09:52:33

<Window x:Class="WPF熊俊.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPF熊俊"
Height="550" Width="600" Name="ddd">
<Window.Resources>
<local:Number Number1="8" Number2="2" x:Key="number" />
<local:NumberConverter x:Key="转换器1" />
</Window.Resources>
<Grid HorizontalAlignment="Left" Height="405" VerticalAlignment="Top" Width="533">
<TextBlock Name="textblock1" DataContext="{StaticResource number}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource 转换器1}" ConverterParameter="减一下" Mode="TwoWay">
<Binding Path="Number1"/>
<Binding Path="Number2"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<Button Content="Button" HorizontalAlignment="Left" Height="58" Margin="161,423,0,-76" VerticalAlignment="Top" Width="68" Click="Button_Click"/>
</Grid>
</Window>



private void Button_Click(object sender, RoutedEventArgs e)
{
textblock1.Text = "张三";
Number m = this.FindResource("number") as Number;
MessageBox.Show(m.Number1.ToString());
}


class Number
{
public int Number1 { get; set; }
public int Number2 { get; set; }
}


class NumberConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) //返回值即作为目标属性值
{
string number;
switch ((string)parameter)
{
case "乘一下":
number = ((Int32)values[0] * (Int32)values[1]).ToString(); //相乘
break;
case "减一下":
number = ((Int32)values[1] - (Int32)values[0]).ToString();//第二个数减第一个数
break;
default:
number = ((Int32)values[0] + (Int32)values[1]).ToString(); //相加
break;
}
return number;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return new object[2]{2,1};
}
}


上面的示例,将TextBlock的Text属性绑定到一个对象,使用的是MultiBinding绑定,并把Mode设置为TwoWay。可是结果是,单向绑定能正常显示,单击button之后,更改TextBlock的Text属性值,并没有任何响应呢?哪里出错了呢?
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码66 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 wpfLove 的回复:

<MultiBinding Converter="{StaticResource 转换器1}"  ConverterParameter="减一下" Mode="TwoWay">
                    <Binding Path="Number1"  Mode="TwoWay" />
                    <Binding Path="Number2"  Mode="TwoWay" />
                </MultiBinding>
修改成这样是可以的~
我试过了,确实是这样的。不过,MSDN上对MultiBinding的Mode属性的解释,明明是:Mode 和 UpdateSourceTrigger 属性的值决定了 MultiBinding 的功能,并用作集合中所有绑定的默认值,除非某个绑定重写这些属性。那只在MultiBinding写一个就可以了的啊
代码66 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 wpfLove 的回复:

<MultiBinding Converter="{StaticResource 转换器1}"  ConverterParameter="减一下" Mode="TwoWay">
                    <Binding Path="Number1"  Mode="TwoWay" />
                    <Binding Path="Number2"  Mode="TwoWay" />
                </MultiBinding>
修改成这样是可以的~
我试过了,确实是这样的。不过,MSDN上对MultiBinding的Mode属性的解释,明明是:Mode 和 UpdateSourceTrigger 属性的值决定了 MultiBinding 的功能,并用作集合中所有绑定的默认值,除非某个绑定重写这些属性。那只在MultiBinding写一个就可以了的啊
小猪八Q 2013-12-05
  • 打赏
  • 举报
回复
我了解了,确实有这么一说,但是这里为什么不行,我也没搞清楚呢
小猪八Q 2013-12-04
  • 打赏
  • 举报
回复

<MultiBinding Converter="{StaticResource 转换器1}"  ConverterParameter="减一下" Mode="TwoWay">
                    <Binding Path="Number1"  Mode="TwoWay" />
                    <Binding Path="Number2"  Mode="TwoWay" />
                </MultiBinding>
修改成这样是可以的~

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧