gpt4 book ai didi

wpf - 数据绑定(bind)在 xaml 中不起作用

转载 作者:行者123 更新时间:2023-12-04 22:43:39 25 4
gpt4 key购买 nike

我尝试使用绑定(bind)在文本内容中显示 Hi。
但是,单击按钮时,它不起作用。
有人可以帮我解决问题吗?
谢谢。

1.XAML 代码:

<Window x:Class="Wpftest.binding.Window0"                          
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window0" Height="300" Width="300">
<Grid>
<TextBox x:Name="textBox2" VerticalAlignment="Top" Width="168"
Text="{Binding Source= stu, Path= Name, Mode=TwoWay}"/>
</Grid>
</Window>

2.类:
namespace Wpftest.binding.Model
{
public class student : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;

public string Name
{
get { return name; }

set { name = value;

if(this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new
PropertyChangedEventArgs("Name"));
}
}
}
}
}

3.XAML.cs:
 namespace Wpftest.binding
{
public partial class Window0 : Window
{
student stu;
public Window0()
{
InitializeComponent();
stu = new student();
}

private void button_Click(object sender, RoutedEventArgs e)
{
stu.Name += "Hi!";
}
}
}

最佳答案

有很多方法可以实现您的需要;正确的方法在很大程度上取决于您要创建的应用程序样式。我将演示两种需要对您提供的示例进行最小更改的方法:

方法一

设置DataContextstu并绑定(bind)到 Name属性(property)。

XAML.cs

    private student stu;

public Window0()
{
InitializeComponent();
stu = new student();
DataContext = stu;
}

XAML 代码
<TextBox Text="{Binding Path=Name, Mode=TwoWay}"/>

方法二

通常你会设置 DataContext到窗口以外的某个对象(例如,如果您遵循 MVVM 模式,则为 ViewModel),但有时您可能需要将控件绑定(bind)到窗口的某些属性。在这种情况下, DataContext无法使用,但您仍然可以使用 RelativeSource 绑定(bind)到 Window 的属性.见下文:

XAML.cs
    // note this must be a property, not a field
public student stu { get; set; }

public Window0()
{
InitializeComponent();
stu = new student();
}

XAML 代码
<TextBox Text="{Binding Path=stu.Name, Mode=TwoWay, 
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>

提示:如果您在 WPF 数据绑定(bind)方面遇到问题,那么查看调试器输出窗口以查看绑定(bind)跟踪消息通常会有所帮助。并且可以通过将此命名空间添加到 Window 元素来进一步增强调试
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"

然后设置 TraceLevel 例如
<TextBox Text="{Binding Source=stu, diag:PresentationTraceSources.TraceLevel=High}"/>

关于wpf - 数据绑定(bind)在 xaml 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com