2010-12-08 4 views
3

データセットは、基本的に、データグリッド(特定のDXGrid)にバインドされたブール値プロパティを持つオブジェクトのリストです。チェックボックスをクリックすると、IsCheckedプロパティが表示されます。スタンドアロンのテキストボックスの場合は、BindingのUpdateSourceTriggerオプションを使用しますが、少なくともDXGridではそれは利用可能ではないようです。つまり、私はプロパティを更新するためにチェックボックスのフォーカスを失う必要があります。WPF/MVVMを使用して、グリッド内のチェックボックスから変更イベントを取得しますか?

すべてのアイデア?

以下のRaisePropertyChanged関数がINotifyPropertyChangedの実装であるとします。

データオブジェクト

public class MyObject 
{ 
    bool _isChecked; 
    string _name; 
    int _id; 

    public MyObject(OtherObject oo) 
    { 
     _name = oo.Name; 
     _id = oo.ID; 
    } 

    public int ID 
    { get { return _id; }} 

    public string Name 
    { get { return _name; }} 

    public bool IsChecked 
    { 
     get { return _isChecked; } 
     set 
     { 
      if (value == _isChecked) 
       return; 
      _isChecked = value; 
      RaisePropertyChanged("IsChecked"); 
     } 
    } 
}  

のViewModel

class MyTestViewModel : BaseViewModel 
{ 
    #region Fields 
    #endregion 

    public MyTestViewModel(Message message) 
     : base(message) 
    { 
     AvailableObjects = PopulateDataSet(); 
    } 

    #region Properties 
    public List<MyObject> AvailableObjects { get; set; } 
} 

ビューXAML

<dxg:GridControl x:Name="SearchGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxHeight="1024" AutoPopulateColumns="True" DataSource="{Binding Path=AvailableObjects}" > 
     <dxg:GridControl.Columns> 
      <dxg:GridColumn Header="Select" Width="60" FixedWidth="True" FieldName="IsChecked" ImmediateUpdateColumnFilter="True"></dxg:GridColumn> 
      <dxg:GridColumn Header="ID Number" Width="130" FixedWidth="True" ReadOnly="True" FieldName="ID"></dxg:GridColumn> 
      <dxg:GridColumn Header="Name" FieldName="Name" ReadOnly="True"></dxg:GridColumn> 
     </dxg:GridControl.Columns> 
     <dxg:GridControl.View> 
      <dxg:TableView AllowEditing="True" x:Name="view" IndicatorWidth="0" AutoWidth="True"/> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 
+0

あなたは内蔵のDataGridCheckBoxColumnとDataGridのWPFのを使用していた場合、あなただけの 'モード= TwoWay'であなたにisCheckedプロパティに列をバインドする可能性が...しかし、私は」私はDXGridを使ってその方法を教えてくれませんでした。 –

+0

グリッドにアンバインドされたチェックボックスを追加することができます(実際には、結果が混在しています)。バインディングパスは何をすると思いますか? {Binding Path = IsChecked、Mode = TwoWay}は動作していないようです。 – SpaceCowboy74

答えて

1

すると、この試してみて:

    <dxg:GridColumn> 
        <dxg:GridColumn.CellTemplate> 
         <DataTemplate> 
          <dxe:CheckEdit Checked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </dxg:GridColumn.CellTemplate> 
       </dxg:GridColumn> 
0

は、それが(DXCheckboxか何かのような)特別なチェックボックスまたは普通のWPFチェックボックスです。後者の場合、バインディングはIsChecked = {バインディングパス= IsChecked、Mode = TwoWay、UpdateSourceTrigger = PropertyChanged}になります。

出力ウィンドウにバインドエラーがありますか?

関連する問題