[关于WPF数据绑定]如何让其他窗口修改本窗口控件绑定的内容?

vpoint2009 2011-01-05 11:00:49
Rt
MainWindow 的一个textbox控件绑定了一个类person的属性name:
一开始用这种方法:

<Window.Resources>
    <local:Person x:Key="Tom" Name="Tom" Age="9" />
 </Window.Resources>
.....
<Grid DataContext="{StaticResource Tom}">
.....
<TextBox Text="{Binding Age}" />


但是外部窗口无法修改这个Window.Resources里面的Key="Tom"的这个对象的内容。

然后试了另一种:

<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}" IsAsynchronous="True" />
<TextBox>
<Binding Source="{StaticResource myDataSource}" Path="Name"/>
</TextBox>


这种更夸张,直接跟Person这个类绑定,无法理解,更别提外部窗口改变了。

目前毫无思路,外部窗口只能修改本窗口的public static 内容吧?至于外部文件读写之类或者timer之类的方式就不考虑了(否则sp1234大又会跳出来批评我菜:P),请教给位大牛!
谢谢大家!
...全文
372 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vpoint2009 2011-01-05
  • 打赏
  • 举报
回复
感谢lzXD!
xsi640 2011-01-05
  • 打赏
  • 举报
回复
为什么要把Person放到Resource里面呢?

<Window x:Class="WpfApplication6.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="winMain"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TextBox x:Name="txt" Text="{Binding Name}" Width="200" Height="20"></TextBox>
<Button Width="80" Height="20" Content="Button" Click="Button_Click" ></Button>
</StackPanel>
</Grid>
</Window>


    public partial class MainWindow : Window
{
private Person _Person = null;

public Person Person
{
get { return this._Person; }
set { this._Person = value; }
}

public MainWindow()
{
InitializeComponent();

this._Person = new Person() { Name = "123" };

this.txt.DataContext = this.Person;

}

private void Button_Click(object sender, RoutedEventArgs e)
{
this._Person.Name = "456";
}
}

public class Person : INotifyPropertyChanged
{
private string _Name;

public string Name
{
get { return this._Name; }
set
{
this._Name = value;
this.OnPropertyChanged("Name");
}
}

public event PropertyChangedEventHandler PropertyChanged;

public void OnPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
vpoint2009 2011-01-05
  • 打赏
  • 举报
回复
XD你真是太nb了,短短几行代码就解决了这个问题!!!而且避开了那些拗口的概念,让人一看就明白是怎么回事,再次膜拜!!!

to后来人:
把private改成public static就能窗口间通讯了。

111,076

社区成员

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

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

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