【发布时间】:2021-11-27 22:53:56
【问题描述】:
我对 wpf 中的数据绑定还比较陌生,但是尽管在这里和其他地方浏览了所有关于可能出现问题的文章和帖子,但我仍然没有找到解决方案。下面的代码是从我的大文件中解析出来的流行信息。
我已确保其他一切正常,包括添加一个属性以检索受保护的参数 options 以确保 options.FullPath 实际上在浏览按钮的 Click 事件上得到设置/更改。我尝试在主窗口中订阅PropertyChanged 事件,其中test.PropertyChanged += ShowMessage;、ShowMessage 是一种触发带有文本的MessageBox 的方法。我尝试了OnPropertyChanged 方法的多种变体,从在调用方法中硬编码到此处显示的内容。我什至尝试将options 设置为默认值"",以防万一这很奇怪。任何事情都没有运气,我目前无法获得 C#6,所以很可能我所拥有的内容适用于正确的语言更新,但我无法确定,因为它不会触发。
任何帮助或见解将不胜感激!
编辑:以下所有代码都位于同一命名空间内。
对象类:
public class EEOptionSet: INotifyPropertyChanged
{
public EEOptionSet()
{
}
public event PropertyChangedEventHandler PropertyChanged;
private string _fullPath;
public string FullPath
{
get { return _fullPath; }
set
{
if (value != _fullPath)
{
_fullPath = value;
OnPropertyChanged();
}
}
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
主窗口后面的代码:
public partial class window : Window
{
protected EEOptionSet options = new EEOptionSet();
private void BrowseFiles(object sender, RoutedEventArgs e)
{
options.FullPath = "Test";
}
}
我的主窗口的 xaml 中的文本框和按钮实例(为简洁起见,删除了网格位置、对齐等无关属性):
<TextBox x:Name="FullPathText" Text="{Binding (options.FullPath), Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" Focusable="False"/>
<uc:ButtonExt x:Name="Browse" Content="..." Click="BrowseFiles"/>
注意:我也试过:
Text="{Binding options.FullPath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding Path=options.FullPath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding Path=(_currentOptionSet.FullPath), Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
以及没有IsReadOnly 和Focusable 属性。
【问题讨论】:
-
IDE 的输出窗口是否存在绑定错误?
-
我构建解决方案时没有。它只是说“开始”、“正在编译...”和“构建成功完成”。
-
抱歉,我应该指定在执行期间显示绑定错误。
标签: c# wpf data-binding textbox inotifypropertychanged