0

メイン アプリにステータス バーがあり、その場で他のユーザー コントロールを作成します。子ユーザー コントロールがステータス バーを更新できるように、ステータス バーを公開したいと考えています。メイン アプリのデータ コンテキストは、ConfigurationSettings のインスタンスに設定されます。私の試みはこれです(機能していません):Xamlで:

<StatusBar Grid.Row="2" Name="StatusBar">
        <StatusBarItem Grid.Column="0">
            <TextBlock Name="CurrentStatus">Ready</TextBlock>
        </StatusBarItem>

そして、私が持っているコードビハインド(MainWindowクラス内)

    // an inner class for data binding
    // ViewModelBase is an class that inherits INotifyPrppertyChanged
    class MainViewModel : ViewModelBase
    {
        public string _Status = "";

        public string Status
        {
            get { return _Status; }
            set { _Status = value; OnPropertyChanged("Status"); }
        }
    }
    private MainViewModel _MainViewModel;

    public MainWindow()
    {
        configSettings = new ConfigurationSettings();
        InitializeComponent();
        this.DataContext = configSettings;

        this._MainViewModel = new MainViewModel();
        this.StatusBar.DataContext = _MainViewModel;
        Binding statusBinding = new Binding("Status");
        statusBinding.Source = this._MainViewModel._Status;
        CurrentStatus.SetBinding(TextBlock.TextProperty, statusBinding);
    }

ViewModelbase は、他のビュー モデルで使用しているため機能します。

私が得たエラーメッセージは次のとおりです。

BindingExpression path error: 'Status' property not found on 'object' ''String' (HashCode=36924794)'. BindingExpression:Path=Status; DataItem='String' (HashCode=36924794); target element is 'TextBlock' (Name='CurrentStatus'); target property is 'Text' (type 'String')
4

1 に答える 1

0

Sourceすでに設定しているので、ここでバインディングを設定する必要はありませんDataContext。下の行を削除すると、バインディングが機能します。

statusBinding.Source = this._MainViewModel._Status;

または、StatusBar にを設定しDataContextたので、xaml のように TextBlock を直接バインドしないでください。

<TextBlock Name="CurrentStatus" Text="{Binding Status}"></TextBlock>
于 2013-09-23T02:40:47.170 に答える