wpf listview不同列数据绑定

windxx 2012-07-23 04:09:12
我想在listview中显示3列数据Data1, Data2, Sum
其中Sum=Data1+Data2,我想用绑定的方式实现,我是这样做的:
声明元数据类型:

// Data类型,包含Data1和Data2属性,用来绑定
public class MyData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private decimal data1;
private decimal data2;
public decimal Data1
{
get { return data1; }
set
{
data1 = value;
if (PropertyChanged != null)
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data1"));
}
}
public decimal Data2
{
get { return data2; }
set
{
data2 = value;
if (PropertyChanged != null)
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data2"));
}
}
}
// MyDatas数据类型,用于标示集合
public class MyDatas : ObservableCollection<MyData>
{ }

// XAML中代码
// 设置资源
<Window.Resources>
<local:MyDatas x:Key="MyDatas"/>
</Window.Resources>
// 显示数据
<StackPanel>
<Button Click="Button_Click">add people</Button>
<Button Click="Button_Click_1">change comany</Button>
<ListView ItemsSource="{StaticResource MyDatas}">
<ListView.View>
<GridView>
<GridViewColumn Header="Data1" DisplayMemberBinding="{Binding Data1}"/>
<GridViewColumn Header="Data2" DisplayMemberBinding="{Binding Data2}"/>
<GridViewColumn Header="Sum" DisplayMemberBinding="{Binding ???}"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>

对于Data1和Data2的Binding已经实现,但是如何让Sum列自动绑定到Data1+Data2?也就是代码中'???'部分应该如何填写?
如果用Converter,那么假如我只binding了Data1 再用一个Converter那么Data2变化的时候明显不会触发Converter,Sum也不会变,请问大家应该怎么解决呢?
真心求教,请大家指点,非常感谢!
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
windxx 2012-07-27
  • 打赏
  • 举报
回复
谢谢:iyomumx,按照你的方法已经解决了,前几天出差没结,呵呵。
iyomumx 2012-07-23
  • 打赏
  • 举报
回复
return d.ToString()
cheng2005 2012-07-23
  • 打赏
  • 举报
回复
Convert里下断点跟一下,看看到底返回什么东西
windxx 2012-07-23
  • 打赏
  • 举报
回复
不好意思还要麻烦大家下,我做了如下的MultiBinding,但是却没有显示,请大家帮忙看下到底怎么回事,谢谢:

// 加入Converter
public class DataConverter : IMultiValueConverter
{
public object Convert(object[] values, System.Type targettype, object parameter, System.Globalization.CultureInfo culture)
{
decimal d = 0.0m;
foreach (object obj in values)
{
d += (decimal)obj;
}

return d;
}
public object[] ConvertBack(object value, System.Type[] targettypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new Exception("cant back!");
}
}

// 在xaml中加入资源
<local:DataConverter x:Key="DataConverter"/>

// 在xaml中加入Binding
<GridViewColumn Header="Sum">
<GridViewColumn.DisplayMemberBinding>
<MultiBinding Converter="{StaticResource DataConverter}">
<Binding Path="Data1"/>
<Binding Path="Data2"/>
</MultiBinding>
</GridViewColumn.DisplayMemberBinding>
</GridViewColumn>


但是显示的时候'Sum'列没有任何东西,是空白,能帮我看下怎么回事么?谢谢各位!
windxx 2012-07-23
  • 打赏
  • 举报
回复
哦,呵呵,这样啊,非常感谢,我先尝试下,我还想是不是要加入一个Sum属性然后在Data1和Data2中都改变值呢,那就蠢了,哈哈哈,总之我先尝试下,可以就给分哈
iyomumx 2012-07-23
  • 打赏
  • 举报
回复
用MultiBinding组合多个Binding

110,534

社区成员

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

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

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