C# WPF中使用代码隐藏的数据绑定
我有一个场景,当字符串属性更改时,我想将字符串属性绑定到UI上的文本框。我想在代码隐藏中更改属性。请在下面找到我的工作:C# WPF中使用代码隐藏的数据绑定,c#,wpf,vb.net,xaml,C#,Wpf,Vb.net,Xaml,我有一个场景,当字符串属性更改时,我想将字符串属性绑定到UI上的文本框。我想在代码隐藏中更改属性。请在下面找到我的工作: XAML : <Window x:Class="databinding.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmln
XAML :
<Window x:Class="databinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="clr-namespace:databinding"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Text="{Binding mobile1}" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<TextBox Text="{Binding mobile2}" Height="23" HorizontalAlignment="Left" Margin="10,43,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,76,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
请查找我定义属性的类:
mobile.cs:
namespace databinding
{
public class mobile:INotifyPropertyChanged
{
string mobile1model;
string mobile2model;
public string mobile1 { get { return mobile1model; } set { mobile1model = value; OnPropertyChanged(new PropertyChangedEventArgs("mobile1")); } }
public string mobile2 { get { return mobile2model; } set { mobile2model = value; OnPropertyChanged(new PropertyChangedEventArgs("mobile2")); } }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
}
}
现在我有了一个测试类,我在其中更改了属性值:
test.cs:
namespace databinding
{
public class talk:MainWindow
{
public void test()
{
mobile mb = new mobile();
mb.mobile1 = "This is mobile 1";
mb.mobile2 = "This is mobile 2";
}
}
}
这里的问题陈述是,当我单击按钮1时,属性得到更新,但UI上的文本框没有得到更新,我还要检查文本框是在属性更改后立即更新,还是要等到第二个属性更改后才能更新?感谢您对此查询的支持
提前谢谢 创建一个
mobile
类的实例,将其设置为Window.DataContext
并在该实例上调用test()
public partial class MainWindow : Window
{
private readonly mobile _mb = new mobile();
public MainWindow()
{
InitializeComponent();
DataContext = _mb;
}
public void test()
{
_mb.mobile1 = "This is mobile 1";
_mb.mobile2 = "This is mobile 2";
}
void button1_Click(object sender, RoutedEventArgs e)
{
this.test();
}
}
创建一个
mobile
类的实例,将其设置为Window.DataContext
并在该实例上调用test()
public partial class MainWindow : Window
{
private readonly mobile _mb = new mobile();
public MainWindow()
{
InitializeComponent();
DataContext = _mb;
}
public void test()
{
_mb.mobile1 = "This is mobile 1";
_mb.mobile2 = "This is mobile 2";
}
void button1_Click(object sender, RoutedEventArgs e)
{
this.test();
}
}
创建一个
mobile
类的实例,将其设置为Window.DataContext
并在该实例上调用test()
public partial class MainWindow : Window
{
private readonly mobile _mb = new mobile();
public MainWindow()
{
InitializeComponent();
DataContext = _mb;
}
public void test()
{
_mb.mobile1 = "This is mobile 1";
_mb.mobile2 = "This is mobile 2";
}
void button1_Click(object sender, RoutedEventArgs e)
{
this.test();
}
}
创建一个
mobile
类的实例,将其设置为Window.DataContext
并在该实例上调用test()
public partial class MainWindow : Window
{
private readonly mobile _mb = new mobile();
public MainWindow()
{
InitializeComponent();
DataContext = _mb;
}
public void test()
{
_mb.mobile1 = "This is mobile 1";
_mb.mobile2 = "This is mobile 2";
}
void button1_Click(object sender, RoutedEventArgs e)
{
this.test();
}
}
只需使用MVVM,忘记代码隐藏。单击按钮将创建一个新实例并设置值。该对象仅存在于您的事件处理程序中,因此如果您愿意,无法绑定。您能否建议一个示例,或者在哪里可以获得实现mvvm的适当示例,因为我是wpf新手?不太可能。但是谷歌wpf MVVM教程和你会发现几十万!只需使用MVVM,忘记代码隐藏。单击按钮将创建一个新实例并设置值。该对象仅存在于您的事件处理程序中,因此如果您愿意,无法绑定。您能否建议一个示例,或者在哪里可以获得实现mvvm的适当示例,因为我是wpf新手?不太可能。但是谷歌wpf MVVM教程和你会发现几十万!只需使用MVVM,忘记代码隐藏。单击按钮将创建一个新实例并设置值。该对象仅存在于您的事件处理程序中,因此如果您愿意,无法绑定。您能否建议一个示例,或者在哪里可以获得实现mvvm的适当示例,因为我是wpf新手?不太可能。但是谷歌wpf MVVM教程和你会发现几十万!只需使用MVVM,忘记代码隐藏。单击按钮将创建一个新实例并设置值。该对象仅存在于您的事件处理程序中,因此如果您愿意,无法绑定。您能否建议一个示例,或者在哪里可以获得实现mvvm的适当示例,因为我是wpf新手?不太可能。但是谷歌wpf MVVM教程和你会发现几十万!当我试图构建它时,它抛出了一个异常,请参见下面的:private readonly talk _ta=new talk();->在databinding.exe
talk
中发生了类型为“System.StackOverflowException”的未处理异常,它是一个窗口,不能无休止地创建自己,因为最终将导致StackOverflowExceptionmobile
是您的视图模型类,因此它应该是private readonly mobile\u mb=new mobile()
(刷新页面)但是textbox1和textbox2会立即更新,我们能做些什么吗?当第一个属性更改时,ui需要更新,就像windows窗体一样?当处理PropertyChanged
事件时,ui会更新,当ui从视图模型中提取新值时。更改属性值时,它不会更新。您不直接更改UI属性,而是绑定视图模型属性,该属性仅通知UI刷新其值。您可以建议可以执行哪些操作以实现我想要的吗?因为这是我的首要要求。衷心感谢您的支持。当我尝试构建它时,它会抛出一个异常,请参见以下:private readonly talk _ta=new talk();->在databinding.exetalk
中发生了类型为“System.StackOverflowException”的未处理异常,它是一个窗口,不能无休止地创建自己,因为最终将导致StackOverflowExceptionmobile
是您的视图模型类,因此它应该是private readonly mobile\u mb=new mobile()
(刷新页面)但是textbox1和textbox2会立即更新,我们能做些什么吗?当第一个属性更改时,ui需要更新,就像windows窗体一样?当处理PropertyChanged
事件时,ui会更新,当ui从视图模型中提取新值时。更改属性值时,它不会更新。您不直接更改UI属性,而是绑定视图模型属性,该属性仅通知UI刷新其值。您可以建议可以执行哪些操作以实现我想要的吗?因为这是我的首要要求。衷心感谢您的支持。当我尝试构建它时,它会抛出一个异常,请参见以下:private readonly talk _ta=new talk();->在databinding.exetalk
中发生了类型为“System.StackOverflowException”的未处理异常,它是一个窗口,不能无休止地创建自己,因为最终将导致StackOverflowExceptionmobile
是您的视图模型类,因此它应该是private readonly mobile\u mb=new mobile()
(刷新页面)但是textbox1和textbox2会立即更新,我们能做些什么吗?当第一个属性更改时,ui需要更新,就像windows窗体一样?当处理PropertyChanged
事件时,ui会更新,当ui从视图模型中提取新值时。更改属性值时,它不会更新。您不直接更改UI属性,而是绑定视图模型属性,该属性仅通知UI刷新其值。您可以建议可以执行哪些操作以实现我想要的吗?因为这是我的首要要求。衷心感谢您的支持。当我尝试构建它时,它会抛出一个异常,请参阅