2

人物オブジェクトを操作するための Wpf-App があります。Person Struct は Sql-server テーブルであり、プロジェクトに Linq-to-Sql を使用しています (したがって、dbml には person を参照するクラスがあります)。

人を更新または挿入するためのフォームがあります(単純なモーダルウィンドウ)。このウィンドウにはPeoperty、現在の人の値があります。

public Person CurrentPerson { get; set; }

だから私が探しているのは:

このウィンドウベースのタイトルをどのようにバインドしCurrentPerson.FullNameますか? CurrentPerson.FullName が変更された場合は、絶対にウィンドウ タイトルを変更する必要があります。

編集: 詳細情報ウィンドウのタイトル ベースをと同じに設定されていないもの
に変更したい。だから、これは何かを変えるかもしれません。また、タイトルの一部を変更することについて、これとこの質問を見つける前に検索しました。しかし、値に基づいてタイトルの一部を変更する必要があります。CurrentPerson.NameCurrentPerson.Name

4

3 に答える 3

2

まず、分離コードまたはビューモデルで を実装する必要がありますINotifyPropertyChanged。その後、次のWindowTitleようなプロパティを実装します。

public string WindowTitle 
{ 
    get { return "Some custom prefix" + CurrentPerson.FullName; } 
}

この後、 を変更するたびに、次のようにイベントをスローFullNameします。CurrentPersonPropertyChanged

Person _currentPerson;
public Person CurrentPerson 
{
    get { return _currentPerson; }
    set
    {
        _currentPerson = value;
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs("WindowTitle"));
    }
}

編集:初心者の投稿に関するコメントを見ると、バインディングの xaml コードを投稿してください。また、をそれ自体に設定してWindowいることを確認してください。DataContext

于 2012-04-10T08:22:10.790 に答える
2

編集:質問を完全に誤解していたため、古い回答を削除しました。

問題はバインディングにある可能性があります。検索する場所を決定できないため、バインディングが失敗すると思いますCurrentUser(binding source)。これを試すことができますか -

編集 2:コントロールに名前を付けて、その名前を Binding Element で次のように使用できます。

<Window x:Class="TestApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="{Binding ElementName=MW,Path=CurrentUser.FullName, StringFormat='Welcome \{0\}!'}"        
    Name="MW">

これが機能しない場合は、次のようにして、バインド式の WPF デバッグを有効にすることができます。

Tools -> Options -> Debugging -> Output Window -> WPF Trace Settings[これは VS2010 用です。他の人にも似ているはずです。]

バインディングエラーがあるかどうかを確認し、ある場合はそれが何であるかを確認します。

于 2012-04-09T06:33:25.427 に答える
1

次のように実行できます。

Person _currentPerson;
public Person CurrentPerson 
{
    get { return _currentPerson; }
    set
    {
        _currentPerson = value;
        this.Title = value.FullName;
    }
}
于 2012-04-09T06:10:26.250 に答える