请教tabControl的绑定问题

人称猪 2014-03-18 08:00:41
首先:我定义了一个实体类用来呈现每一个tabControl的 tabItem
    public class ItemCentent : INotifyPropertyChanged
{

public int Id { get; set; }
public string Title { get; set; }

private string content;

public string Centent {
get { return content; }
set
{
if (value != content) ;
NotifyPropertyChanged("Content");
content = value;
}
}

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}

在xaml中只定义一个tabcontrol和一个按钮。当点击按钮时改变数据源中某一项的值
       
<TabControl Name="TabControlMain" Margin="0,0,101,0">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Red" Text="{Binding Path=Title}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<StackPanel Margin="10">
<StackPanel Orientation="Horizontal" Margin="5" VerticalAlignment="Bottom">
<TextBlock Text="标题:" Height="16.837" />
<TextBox Width="100" Text="{Binding Path=Title}" Name="txt_Title"/>
</StackPanel>
<TextBox Height="333" Margin="0,0,10,0" Name="rtb_Content" Text="{Binding Path=Centent ,UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" AcceptsReturn="True"/>
</StackPanel>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
<Button Content="Button" HorizontalAlignment="Left" Margin="207,79,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

在初始化函数里面给tabcontrol绑定数据源

private ObservableCollection<Entity.AttachInfo> viewModel = new ObservableCollection<Entity.AttachInfo>();

public ProperyChangeTest()
{
InitializeComponent();

viewModel.Add(new Entity.ItemCentent()
{
Centent = "测试内容内容1",
Title = "标题1"
});
viewModel.Add(new Entity.ItemCentent()
{
Centent = "测试内容内容2",
Title = "标题2"
});
viewModel.Add(new Entity.ItemCentent()
{
Centent = "测试内容内容3",
Title = "标题3"
});

this.TabControlMain.SetBinding(TabControl.ItemsSourceProperty,
new Binding(".")
{
Source = viewModel,
UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged,
Mode = BindingMode.TwoWay
});
}

private void Button_Click(object sender, RoutedEventArgs e)
{
viewModel.First().Centent = "修改后!";
}

整个测试代码的意思就是在初始化的时候给TabControl绑定一个数据源,然后点击页面中的一个按钮动态的改变了这个数据源的一个数据。但是上述测试代码的效果是点击了按钮之后,数据并没有立即变化成"修改后!"。而是要切换一下TabControl的选项卡之后重新再点击选项卡1,选项卡1的textbox才会显示为“修改后!”。按照网上很多的资料在把绑定的属性UpdateSourceTrigger设置成PropertyChanged之后并且源数据实现INotifyPropertyChanged接口之后应该在数据源发生数据变化时实时的显示出来的呀。不知道问题出在了哪边,还请大侠们帮忙
...全文
232 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
人称猪 2014-03-20
  • 打赏
  • 举报
回复
确实是楼上两位所说的问题,谢谢两位大大!
小猪八Q 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 KumaPower 的回复:
除了1楼说的问题外,你的
NotifyPropertyChanged("Content");
应该是
NotifyPropertyChanged("Centent");
不细心看还真看不出Centent与Content。。。。。。
确实有点坑~
Bonjour-你好 2014-03-18
  • 打赏
  • 举报
回复
除了1楼说的问题外,你的
NotifyPropertyChanged("Content");
应该是
NotifyPropertyChanged("Centent");
不细心看还真看不出Centent与Content。。。。。。
小猪八Q 2014-03-18
  • 打赏
  • 举报
回复
public string Centent { get { return content; } set { if (value != content) { content = value; NotifyPropertyChanged("Content"); } } } 按照上面修改你的Content属性

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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