2

各レコードにはコース オブジェクトと結果オブジェクトの ObservableCollection がある、レコードの ObservableCollection にバインドされたデータグリッドを表示するアプリケーションを構築しています。

コースは、オートコンプリート ボックスを使用して変更されます。結果コレクションは、現在選択されているコースの基準に基づいて楕円テンプレートの色を変更する IValueConverter 実装を含むリストボックスに表示されます。

読み込みにはうまく機能しますが、オートコンプリートによるコース選択へのその後の更新は、値コンバーターの再計算/更新をトリガーしません。

XAML で更新をトリガーする方法はありますか。リストボックスのバインディングに UpdateSource=Property changed を追加したのですが、これでスタックオーバーフローしてしまいました(笑)。

コードは次のとおりです。

<data:DataGrid x:Name="MyDatGrid">
<data:DataGrid.Columns>
    <data:DataGridTemplateColumn Header="Results">
        <data:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
           <ListBox ItemsSource="{Binding ListOfResults}">
               <ListBox.ItemsPanel>
                   <ItemsPanelTemplate>
                       <StackPanel Orientation="Horizontal"/>
                   </ItemsPanelTemplate>
               </ListBox.ItemsPanel>
               <ListBox.ItemTemplate>
                   <DataTemplate>
                       <Ellipse Width="20" Height="20" Fill="{Binding Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" />
                   </DataTemplate>
               </ListBox.ItemTemplate>
          </ListBox>
        </DataTemplate>
        </data:DataGridTemplateColumn.CellTemplate>
     </data:DataGridTemplateColumn>
     <data:DataGridTemplateColumn Header="Course" >
        <data:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Border>
                   <input:AutoCompleteBox ItemsSource="{Binding Courses, Source={StaticResource coursesSource}}"/>
               </Border>
             </DataTemplate>
     </data:DataGridTemplateColumn.CellTemplate>

オートコンプリート ボックスで LostFocus イベントをサブスクライブし、データグリッドに既にあるフィルターをリセットすることができました。しかし、これは非常に非効率的ではありませんか? データグリッドでビューを更新しても、そのメソッドには何の効果もありません。

正しい方向への一歩は大歓迎です。自分がもう灰色になるのを防ごうとしています:)

グリッド内のリストのバインディング式を取得して更新することを考えましたが、手がかりはありませんか?

みんなありがとう

4

1 に答える 1

1

最初に、Record オブジェクトが INotifyPropertyChanged を実装し、Course プロパティがそれを呼び出すことを確認します。

resultToBrushConverter のコンバーターは、バインドされたオブジェクトの複数のプロパティにアクセスする必要がありますか? Course のみに依存する場合はCourse、そのパスとして使用します。

編集

これらのものが整っていると仮定すると、Fill のバインディングは次のようになります。

<Ellipse Width="20" Height="20" Fill="{Binding Coarse, Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" />

これでバインディングは Coarse プロパティを監視していることを認識したので、PropertyChanged イベントが Coarse プロパティに対して発生したときに Fill を更新する必要があります。

于 2009-10-15T12:10:04.920 に答える