绑定到另一个类WPF中的属性

时间:2017-08-06 05:20:29

标签: c# .net wpf xaml

我对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,我会按预期获得默认值。 在我完成了所有阅读之后,我已经尝试了几种不同的方法来尝试与之相关,但我似乎无法让它发挥作用。

1 个答案:

答案 0 :(得分:0)

我没有尝试在xaml中设置上下文。

加载窗口的事件

txtCLIPath.DataContext = CLIOptions;

XAML

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