4

タイプ Project の任意の数のオブジェクトを格納するプログラムを作成しました。各プロジェクトには、このプログラム用に作成した別のオブジェクトである任意の数のファイルが含まれます。

私が抱えている問題は、XAML の 2 つの領域で発生しますが、同様の起源があると思います。

選択したプロジェクトのファイルが取り込まれた ListView を含むウィンドウがあります。ここから、それぞれの横にあるボックスをオンにしてオンまたはオフにできます。ファイルを選択すると、そのファイルに関する情報がこのウィンドウのステータス バーに表示されます。

ファイルをオフにすると、そのテキストの色は ListView で明るい灰色に表示されるはずですが、これは自動的には行われません。ウィンドウを閉じて、再度開く必要があります。File は INotifyPropertyChanged を実装し、オン/オフ状態が変化した場合にこのイベントを発生させます。

コンバーターがコード ビハインド クラスにあるこの XAML コードを使用します。

<ListBox.ItemContainerStyle>
     <Style TargetType="ListBoxItem">
          <Setter  Property="Foreground" Value="{Binding Path=IsVisible, Converter={StaticResource VisibleStateToFontColourConverter}}"/>
     </Style>
</ListBox.ItemContainerStyle>  

また、選択したファイルについて、選択中にファイル内の情報が変更された場合 (他のクラスが原因で発生する可能性があります)、ステータスバーを自動的に更新してこの変更を反映させたいのですが、そうではありません。他の何かをクリックしてから、目的のファイルを再度選択する必要があります。これにも INotifyPropertyChanged を実装して使用しているため、自動更新されない理由がわかりません。ステータス アイテムの XAML コードは次のようになります。

<StatusBarItem Name="statusItem_FileInfo" Content="{Binding ElementName=loadedFiles_ListView, Path=SelectedItem, Converter={StaticResource GIS_FileToInfoConverter}}"/>

それをすべてまとめるために私が欠けているものを誰かが知っていますか?

4

2 に答える 2

8

UpdateSourceTrigger=PropertyChangedバインディングに追加してみてください:

Value = "{Binding ... , UpdateSourceTrigger=PropertyChanged}"

変更されたプロパティの名前でプロパティを変更した直後に呼び出しOnPropertyChangedます。

public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyName)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler == null) return;
    handler (this, new PropertyChangedEventArgs(propertyName));
}

"IsVisible"電話を変更した場合OnPropertyChanged("IsVisible")

于 2012-05-22T12:53:21.497 に答える
0

リストボックス項目にデータトリガーを使用しないのはなぜですか? 私が正しければ、2つの状態を切り替えたいだけですか?

したがって、デフォルトのスタイルは foreground=black および datatrigger Property=IsVisible Value=false --> 次に foreground lightgrey にする必要があります

于 2012-05-22T13:22:17.287 に答える