【问题标题】:Binding to a property in another class WPF绑定到另一个类 WPF 中的属性
【发布时间】:2018-01-13 16:34:58
【问题描述】:

我对 WPF 非常陌生,并且我在 winforms 中绑定了数据,但我将把头发拉出来尝试简单地将文本框绑定到属性。

我只是想将我的选项类绑定到各种控件,我目前尝试绑定的是 AppCliOptions.CLIPath

我首先想说的是,我已经在这方面工作了几天,每天花了一个小时左右试图找出问题所在。但是我还没有找到任何特定于我正在尝试做的事情,也许我只是忽略了它,或者我仍然没有获得 WPF 和 xaml,我相信这很简单。

我确实看到有人说你不能绑定到静态类,但我的类不是静态的,只是我对实例的引用是。

我有一个静态单例类,这是一个例子。

public abstract class AppOptionsBase<T> : INotifyPropertyChanged where T : AppOptionsBase<T>, new()
{
    protected static T instance = new T();

    public event PropertyChangedEventHandler PropertyChanged;

    public static T Instance => instance;

    protected AppOptionsBase() { }
    protected void OnPropertyChanged(string name)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
    }
}
public class AppCliOptions : AppOptionsBase<AppCliOptions>
{
    private string _cliPath;
    public string CLIPath { get => _cliPath; set { _cliPath = value; OnPropertyChanged("CLIPath"); } }
    public AppCliOptions()
    {
        //Set defaults
        CLIPath = @"C:\Path\to\CLI.exe";
    }
}

我的 Xaml.cs 文件

public static AppCliOptions CLIOptions => AppCliOptions.Instance;

我的 .xaml 文件

<TextBox Grid.Row="1" Grid.Column="0" DataContext="{Binding CLIOptions}" Text="{Binding Path=CLIPath}" BorderBrush="Black"/>

文本框文本始终为空白,如果我通过代码调用 CLIOptions.CLIPath,我将按预期获得默认值。 在我完成所有阅读之后,我尝试了几十种不同的方法来尝试绑定它,但我似乎无法让它发挥作用。

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:

    我通过不尝试在 xaml 中设置上下文来使其正常工作。

    窗口加载事件

    txtCLIPath.DataContext = CLIOptions;
    

    XAML

    <TextBox x:Name="txtCLIPath" Grid.Row="1" Grid.Column="0" Text="{Binding CLIPath}" BorderBrush="Black"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2010-11-14
      • 2015-09-23
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多