2017-08-06 24 views
0

私はWPFの新機能で、データバインドはwinformsで行っていますが、ここではテキストボックスをプロパティにバインドしようとしています。別のクラスのプロパティへのバインドWPF

私は単にさまざまなコントロールに私のオプションクラスをバインドしようとしている、私は現在、バインドしようとしている一つがAppCliOptions.CLIPath

である私が最初にちょうど私が今これをしてきたと言いたいです数日後、何が間違っているか把握しようと1時間ほどかかりました。しかし、私が何をしようとしているのか分からない、多分私はそれを見落としている、または私はまだ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は、テキストボックスのテキストは、私がコードをCLIOptions.CLIPathを呼び出す場合、私は、デフォルトを取得し、常に空白です

public static AppCliOptions CLIOptions => AppCliOptions.Instance; 

私の.xamlファイル

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

を提出します期待どおりの価値。 私が行ったすべての読書の後、私はこれに試してバインドするために数十の異なる方法を試しましたが、それを動作させることはできません。

答えて

0

私はxamlでコンテキストを設定しようとしないで作業しました。

ウィンドウにロードイベント

txtCLIPath.DataContext = CLIOptions; 

XAML

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