0

ListView/GridView に埋め込まれたチェックボックスの状態を変更する方法を見つけようとしています。問題は、チェックボックスが別の DataGrid 内の一部のレコードの承認ステータスに依存していることです。(例: チェックボックスを承認ステータスとして使用しています。True = すべて承認済み、False = なし、null = 一部承認済み)。

DataContext はエンティティであるため、処理に使用できる bool 値がありません。

<ListView x:Name="EmployeeNameListBox" Height="330" ItemsSource="{Binding}" SelectedValuePath="ID" SelectionChanged="EmployeeNameListBoxSelectionChanged">
    <ListView.View>
        <GridView AllowsColumnReorder="False" >                           
            <GridViewColumn>
        <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsThreeState="True" Checked="EmployeeCheckBoxChecked" Unchecked="EmployeeCheckBoxChecked" x:Name="CheckBoxHero"/>                                                  
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <MultiBinding StringFormat="{}{0}, {1} - {2}">
                                    <Binding Path="LastName" />
                                    <Binding Path="FirstName" />
                                    <Binding Path="EmployeeNumber" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

承認ステータスを更新しようとしている場所は次のとおりです。

foreach (var employee in this.employees)
{
    var records = from a in this.dailyActivities where a.Employee == employee select a;

    var approvedRecords = from r in records where r.IsApproved == true select r;

    if (approvedRecords.Count() == 0)
    {
        // None Approved checkbox state = false
    }
    else if (approvedRecords.Count() == records.Count())
    {
         // All Approved checkbox state = true
    }
    else
    {
         // Some Approved Set Checkbox state to null
    }                
}
4

1 に答える 1

0

ViewModel クラスにラッパー プロパティを作成しNullable bool (bool?)(MVVM パターンを使用していると想定しています)、 を使用してチェックボックスをそのプロパティにバインドするだけRelativeSourceです。

getterそのプロパティのロジックを入れてください-

public bool? IsRecordApproved
{
  get
  {
     .....
     // Your logic here
  }
}

また、UI でプロパティを更新する必要がある場合はいつでも、プロパティでプロパティ変更イベントを発生させます。(INotifyProeprtyChangedイベントは ViewModel クラスで実装する必要があります)

于 2012-09-05T17:12:37.283 に答える