Получение события Change из флажка в сетке с использованием WPF / MVVM? - PullRequest
3 голосов
/ 09 декабря 2010

У меня есть набор данных, который по сути представляет собой список объектов с логическим свойством в них, которое связано с DataGrid (точнее, с DXGrid). Я пытаюсь получить свойство IsChecked для заполнения при нажатии флажка. В случае автономного текстового поля, я бы использовал опцию UpdateSourceTrigger в Binding, но, по крайней мере, в DXGrid, она, кажется, недоступна. Как таковой, я должен потерять фокус флажок, чтобы обновить свойство.

Есть идеи?

Предположим, что приведенная ниже функция 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>

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Попробуйте:

                    <dxg:GridColumn>
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>
                            <dxe:CheckEdit Checked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>
                </dxg:GridColumn>
0 голосов
/ 24 февраля 2011

Это специальный флажок (например, DXCheckbox или что-то в этом роде) или просто обычный флажок WPF. В последнем случае привязка будет IsChecked = {Binding Path = IsChecked, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}.

Есть ли какие-либо ошибки привязки в окне вывода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...