wpf 窗口刷新问题

leeKitty 2014-12-01 02:28:53
WFP 在窗口A中点击按钮 打开窗口B 在窗口B中向数据库表中插入数据
然后 再关闭窗口B的同时 我想更新 窗口A中的 DataGrid控件 将刚才在窗口B中添加的数据显示出来
我应该怎么做呢
谢谢
...全文
438 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
你要上天 2015-10-28
  • 打赏
  • 举报
回复
CommonHelper.GetPersonList(); Person 能给个具体点的不。 我也想实现GIF图中的效果
leeKitty 2014-12-02
  • 打赏
  • 举报
回复
引用 9 楼 duanzi_peng 的回复:
写了个例子: ViewModel类:

public class ViewModel
    {
        private static ViewModel viewModel;
        public static ViewModel GetInstance()
        {
            if (viewModel == null)
                viewModel = new ViewModel();
            return viewModel;
        }

        private ObservableCollection<Person> collection = new ObservableCollection<Person>();
        public ObservableCollection<Person> Collection
        {
            get
            {
                CommonHelper.GetPersonList();
                return CommonHelper.PersonList;  // 此处为数据源定义,根据自己的需求来返回。
            }
        }

    }
A.Xaml

<Window x:Class="wpf.CSDN.FrmRefresh.WindowA"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WindowA" Height="300" Width="300">
    <Grid>
        <StackPanel>
            <Button Width="120" Height="30" Content="弹出frmB" HorizontalAlignment="Left" Margin="10" PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown"></Button>
            <DataGrid x:Name="dgList" AutoGenerateColumns="False" 
                      ItemsSource="{Binding Collection}" CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>
    </Grid>
</Window>
A.xaml.cs:
 /// <summary>
    /// WindowA.xaml 的交互逻辑
    /// </summary>
    public partial class WindowA : Window
    {
        public WindowA()
        {
            InitializeComponent();
            this.DataContext = ViewModel.GetInstance();
        }

        private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            WindowB windowb = new WindowB();
            windowb.ShowDialog();
        }
    }
B.xaml:
<Window x:Class="wpf.CSDN.FrmRefresh.WindowB"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WindowB" Height="300" Width="300">
    <Grid>
        <WrapPanel>
            <TextBox x:Name="mytxt" Width="150"></TextBox>
            <Button Content="add" PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown"></Button>
        </WrapPanel>
    </Grid>
</Window>
B.xaml.cs:
/// <summary>
    /// WindowB.xaml 的交互逻辑
    /// </summary>
    public partial class WindowB : Window
    {
        public WindowB()
        {
            InitializeComponent();
        }

        private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Person person = new Person()
            {
                Name = mytxt.Text.Trim(),
            };
            ViewModel.GetInstance().Collection.Add(person);
        }
    }
效果:
太感谢了 昨晚我用委托实现了 非常感谢 辛苦啦
exception92 2014-12-02
  • 打赏
  • 举报
回复
写了个例子:
ViewModel类:

public class ViewModel
{
private static ViewModel viewModel;
public static ViewModel GetInstance()
{
if (viewModel == null)
viewModel = new ViewModel();
return viewModel;
}

private ObservableCollection<Person> collection = new ObservableCollection<Person>();
public ObservableCollection<Person> Collection
{
get
{
CommonHelper.GetPersonList();
return CommonHelper.PersonList; // 此处为数据源定义,根据自己的需求来返回。
}
}

}

A.Xaml

<Window x:Class="wpf.CSDN.FrmRefresh.WindowA"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowA" Height="300" Width="300">
<Grid>
<StackPanel>
<Button Width="120" Height="30" Content="弹出frmB" HorizontalAlignment="Left" Margin="10" PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown"></Button>
<DataGrid x:Name="dgList" AutoGenerateColumns="False"
ItemsSource="{Binding Collection}" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</Window>

A.xaml.cs:
 /// <summary>
/// WindowA.xaml 的交互逻辑
/// </summary>
public partial class WindowA : Window
{
public WindowA()
{
InitializeComponent();
this.DataContext = ViewModel.GetInstance();
}

private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
WindowB windowb = new WindowB();
windowb.ShowDialog();
}
}

B.xaml:
<Window x:Class="wpf.CSDN.FrmRefresh.WindowB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowB" Height="300" Width="300">
<Grid>
<WrapPanel>
<TextBox x:Name="mytxt" Width="150"></TextBox>
<Button Content="add" PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown"></Button>
</WrapPanel>
</Grid>
</Window>

B.xaml.cs:
/// <summary>
/// WindowB.xaml 的交互逻辑
/// </summary>
public partial class WindowB : Window
{
public WindowB()
{
InitializeComponent();
}

private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Person person = new Person()
{
Name = mytxt.Text.Trim(),
};
ViewModel.GetInstance().Collection.Add(person);
}
}

效果:

leeKitty 2014-12-01
  • 打赏
  • 举报
回复
引用 7 楼 duanzi_peng 的回复:
[quote=引用 4 楼 lkt19911025 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] 使用动态数据集合 ObservableCollection https://social.msdn.microsoft.com/Search/zh-CN?query=WPF%20%20ObservableCollection&emptyWatermark=true&ac=4
这个方式 我没太会 我查的资料 大都是 get set 我连接的数据库 直接用DataGridTextColumn binding 绑定数据字段的 这种我如何使用 ObservableCollection 谢谢[/quote] 链接都给你了,里边都有例子的。[/quote] 我已经写出来了 数据可以正常显示用你的方法 但是 我在B窗口里添加完数据后 关闭窗口时 A窗口里的 DataGrid没有变化 新增的数据也没有显示 为什么呢
exception92 2014-12-01
  • 打赏
  • 举报
回复
引用 4 楼 lkt19911025 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] 使用动态数据集合 ObservableCollection https://social.msdn.microsoft.com/Search/zh-CN?query=WPF%20%20ObservableCollection&emptyWatermark=true&ac=4
这个方式 我没太会 我查的资料 大都是 get set 我连接的数据库 直接用DataGridTextColumn binding 绑定数据字段的 这种我如何使用 ObservableCollection 谢谢[/quote] 链接都给你了,里边都有例子的。
灬浪子灬 2014-12-01
  • 打赏
  • 举报
回复
A中定义委托 打开B窗体的时候将委托当参数传递过去 操作完后待用委托就OK了
灬浪子灬 2014-12-01
  • 打赏
  • 举报
回复
引用 楼主 lkt19911025 的回复:
WFP 在窗口A中点击按钮 打开窗口B 在窗口B中向数据库表中插入数据 然后 再关闭窗口B的同时 我想更新 窗口A中的 DataGrid控件 将刚才在窗口B中添加的数据显示出来 我应该怎么做呢 谢谢
委托比较好点! 只打开 不操作 关闭就不用刷新了
leeKitty 2014-12-01
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
使用动态数据集合 ObservableCollection https://social.msdn.microsoft.com/Search/zh-CN?query=WPF%20%20ObservableCollection&emptyWatermark=true&ac=4
这个方式 我没太会 我查的资料 大都是 get set 我连接的数据库 直接用DataGridTextColumn binding 绑定数据字段的 这种我如何使用 ObservableCollection 谢谢
exception92 2014-12-01
  • 打赏
  • 举报
回复
leeKitty 2014-12-01
  • 打赏
  • 举报
回复
引用 1 楼 zhanglong19891129 的回复:
你不是提交了到数据库了么,在关闭B的时候,让A 刷新下不就行了
这是CS 程序 我的窗口A中有登录时传过来的参数,如果刷新窗口B 参数就没有了 后续程序没法写了
zhanglong19891129 2014-12-01
  • 打赏
  • 举报
回复
你不是提交了到数据库了么,在关闭B的时候,让A 刷新下不就行了

110,539

社区成员

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

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

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