读书人

双向绑定模式有关问题求教

发布时间: 2013-09-06 10:17:17 作者: rapoo

双向绑定模式问题求教
本帖最后由 gaosam 于 2013-07-20 21:32:44 编辑 新手求教双向绑定的方式问题,不知道大虾们的使用思路是怎么样的
目前做的双向绑定思路一直是
/////////////////////////////////////////////////
后台创建一个public实体 然后给前台的Grid赋值
grid.DataContext = sbelistInfo;
然后Grid里的textbox双向绑定,点击保存的时候再拿sbelistInfo进行数据库commit的样子
当然textbox可以响应textchange事件把sbelistInfo的另一列的值更动,实现另一个控件的值直接变动的效果
这样做似乎有问题,但不影响效果
//////////////////////////////////////////////////
但这种思路用在datagrid上就出现问题了,比如datagrid列了个模板列
后台绑定了一个List<T> 数据源
我想实现对前几列的值改动后,自动算出合计列的值

<DataGridTemplateColumn Header="收费时间"  Width="120"  >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<DatePicker Text="{Binding FFetchDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Background="Transparent" Width="115" SelectedDateChanged="DatePicker_SelectedDateChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="A费用" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<MyContrl:MyTextBox Text="{Binding lcPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextChanged="MyTextBox_TextChanged" />


</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="B费用" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<MyContrl:MyTextBox Text="{Binding czPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextChanged="MyTextBox_TextChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="C费用" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<MyContrl:MyTextBox Text="{Binding zxPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextChanged="MyTextBox_TextChanged" />


</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="杂费" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<MyContrl:MyTextBox Text="{Binding qtPrice,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" TextChanged="MyTextBox_TextChanged" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="合计" Width="100" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate >
<TextBlock Text="{Binding FAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />


</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>



当我给前面几列的控件加上textchange事件时,绑定会重复触发,如果后台先=null再重新赋值,就会出现死循环,但如果不加textchange事件,又没办法对后台的list的合计列进行计算,
比如前面的时间控件,我想实现如果改变了时间,则添加一行新的,如果把时间删除,刚把这一行删掉
  private void DatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if ((sender as DatePicker).Text == "")
{
t_CRM_ICStockBillEntryInfo selectItem = gdvDataList.SelectedItem as t_CRM_ICStockBillEntryInfo;
sbelist.Remove(selectItem);
}
else
{
t_CRM_ICStockBillEntryInfo sbe = sbelist.Where(q => q.FFetchDate == (sender as DatePicker).Text).FirstOrDefault();
if (sbe == null)
{
sbelist.Add(new t_CRM_ICStockBillEntryInfo { FFetchDate = (sender as DatePicker).Text, lcPrice = "0", czPrice = "0", zxPrice = "0", qtPrice = "0", FAmount = "0" });

}
}
gdvDataList.DataContext = null;//出现死循环


gdvDataList.DataContext = sbelist; //仅这样绑定 或者ItemSource也是,新添加进来的行不会显示出来
}



有没事件可以在后台list发生变动时响应的办法,或者有其它思路实现这些操作 WPF?双向绑定 WPF.双向绑定
[解决办法]
public class datasource : INotifyPropertyChanged
{
public bool ischeck=false;
public bool isCheck
{
get
{
return ischeck;
}
set
{
ischeck = value;
onPropertyChanged(this, "isCheck");
}
}
public string col1 { get; set; }
public string col2 { get; set; }

public event PropertyChangedEventHandler PropertyChanged;

private void onPropertyChanged(object sender, string propertyName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));


}
}

}


[解决办法]
二楼正解……
[解决办法]
二楼的方式可以实现
[解决办法]
但对于最后一行统计行的操作却没办法实现~
既然属性C可以可以自动计算出,为什么最后一行统计行的操作却没有办法实现呢,难点是?

读书人网 >CAD教程

热点推荐