gpt4 book ai didi

c# - 为什么我的 WPF 绑定(bind)实现不能双向工作?

转载 作者:太空宇宙 更新时间:2023-11-03 23:08:37 24 4
gpt4 key购买 nike

我正在尝试为 WPF 绑定(bind)创建一个模板,以便我可以在将来需要使用绑定(bind)时从中提取代码。目前绑定(bind)不起作用。

我希望此代码在 UI 的文本框中显示“MyString”和“MyInt”,并在用户更改值时正确更改逻辑(因此出现复选按钮)。

但是,MyString 和 MyInt 并未显示在文本框中,更改它们也不会实际更改变量的值。

主窗口.xaml.cs:

using System.Windows;
namespace WpfBindingTemplate
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
myController = new Controller();
}

Controller myController;

private void check_string(object sender, RoutedEventArgs e)
{
MessageBox.Show("MyString: " + myController.MyString);
}

private void check_int(object sender, RoutedEventArgs e)
{
MessageBox.Show("MyInt: " + myController.MyInt);
}
}
}

主窗口.xaml:

<Window x:Class="WpfBindingTemplate.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfBindingTemplate"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Name="myTextBox" Text="{Binding Path=myController.MyString}" HorizontalAlignment="Left" Height="23" Margin="202,136,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<Label x:Name="label" Content="String binding:" HorizontalAlignment="Left" Margin="77,133,0,0" VerticalAlignment="Top" Width="104"/>
<Button x:Name="button" Content="string check" Click="check_string" HorizontalAlignment="Left" Margin="370,136,0,0" VerticalAlignment="Top" Width="75"/>
<Label x:Name="label1" Content="int binding:" HorizontalAlignment="Left" Margin="77,188,0,0" VerticalAlignment="Top" Width="94"/>
<TextBox x:Name="textBox" Text="{Binding Path=myController.MyInt}" HorizontalAlignment="Left" Height="23" Margin="202,190,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
<Button x:Name="button1" Click="check_int" Content="int check" HorizontalAlignment="Left" Margin="370,188,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>

Controller 类:

using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace WpfBindingTemplate
{
public class Controller : INotifyPropertyChanged
{
public Controller()
{
MyString = "test string";
MyInt = 1;
}

public int MyInt { get; set; }

private string myString;
public string MyString { get { return myString; } set { SetProperty(ref myString, value); } }


public event PropertyChangedEventHandler PropertyChanged;
private void SetProperty<T>(ref T field, T value, [CallerMemberName] string name = "")
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
}

最佳答案

对于初学者来说,绑定(bind)对字段不起作用,您需要在“Controller myController;”上进行获取/设置。它还需要公开(在某些情况下,它也适用于内部)。

关于c# - 为什么我的 WPF 绑定(bind)实现不能双向工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40272078/

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