gpt4 book ai didi

c# - 字典 - 文本框绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-12-03 11:03:33 25 4
gpt4 key购买 nike

我没有使用 View 模型,有一个类似的帖子使用了 View 模型,我试图以此为基础,但它不起作用,
WPF binding textbox to dictionary entry

当我单击我的按钮时,我创建了一个列表,然后形成了一个字典,因此在我精简的示例中以使其工作,我在按钮单击时创建字典

代码隐藏

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private Dictionary<string, string> _MyDict;


public Dictionary<string, string> MyDict {
get { return _MyDict; }
set { _MyDict= value; }
}
private void button_Click(object sender, RoutedEventArgs e)
{
MyDict = new Dictionary<string, string>
{
{"First", "Test1"},
{"Second", "Test2"}
};
}
}

XAML
Title="MainWindow" Height="350" Width="674.167">
<Grid>
<Button x:Name="createListfromTextFile" Content="hi" Click="button_Click"/>

<TextBox x:Name="textBox1" Text="{Binding MyDict[First], UpdateSourceTrigger=PropertyChanged}" Height="279" >

</Grid>

更新

根据 Chrille 的评论,我解决了这个问题,
通过实现 INotifyPropertyChanged像这样:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}

public Dictionary<string, string> MyDict
{
get { return _MyDict; }
set {

_MyDict = value;
if (null != PropertyChanged)
{
this.PropertyChanged(this, new PropertyChangedEventArgs ("MyDict"));
}
}
}
}

最佳答案

您的 MainWindow 类 (DataContext) 需要实现 INotifyPropertyChanged。

public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}

public Dictionary<string, string> MyDict
{
get { return _MyDict; }
set
{
_MyDict = value;
PropertyChanged?.(this, new PropertyChangedEventArgs("MyDict"));
}
}
}

或者更好的是,为 View 模型创建一个单独的类并从 ViewModelBase 或类似继承:
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected virtual void NotifyPropertyChanged(params string[] propertyName)
{
foreach (var prop in propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(prop));
}
}

protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, args);
}
}
}

最后在二传手:
public Dictionary<string, string> MyDict
{
get { return _MyDict; }
set
{
_MyDict = value;
NotifyPropertyChanged("MyDict");
}
}

关于c# - 字典 - 文本框绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631046/

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