Определение, какой флажок ListViewItem существовал в - PullRequest
0 голосов
/ 15 декабря 2009

Я видел что-то об этом, но сейчас я потерял это и не могу найти это снова. Мне нужно знать, в каком ListViewItem установлен флажок, когда флажок установлен (что в конечном итоге приведет к его удалению),

Я пытался заполучить родителя, но, видимо, это не сработало.

XAML:

<ListView Name="incomingMessages" Extensions:ListViewColumns.Stretch="true"
  Height="226" Canvas.Left="0" Canvas.Top="0" Width="755" ItemsSource="{Binding Messages}">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Time" Width="100" DisplayMemberBinding="{Binding Time}" />
      <GridViewColumn Header="Message" DisplayMemberBinding="{Binding FullMessage}"  />
      <GridViewColumn Header="Phone Number" DisplayMemberBinding="{Binding Number}" Width="85"  />
      <GridViewColumn Header="Done" Width="45">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <CheckBox IsChecked="{Binding Done}" VerticalAlignment="Center" />
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

Какой код необходимо добавить в событие Checked, чтобы оно заработало? (В качестве дополнительного вопроса, почему мое VerticalAlignment не центрирует мои флажки в столбце?)

Как я уже говорил, я использовал родительский код в таком коде

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            CheckBox cb = (CheckBox)sender;
            object lv = cb.parent;
        }

И если я остановлюсь на строке cb.parent, cb.parent будет нулевым.

Спасибо, Psy

Ответы [ 2 ]

0 голосов
/ 15 декабря 2009

Хорошо, так что я решил сделать это

<CheckBox IsChecked="{Binding Done}"
  Uid="{
    Binding Path=Items.Count,
    Mode=OneTime,
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}
  }"
  Checked="CheckBox_Checked"
  VerticalAlignment="Center"
  HorizontalAlignment="Center" />

Что работает (кроме первых трех, которые добавлены, потому что они добавляются во время выполнения и, кажется, обходят это, однако в живой версии этого не произойдет, так что все в порядке. Но тогда я вижу, что это приводит к проблемам после удаления UID будет сохранен, но источник данных не будет совпадать. Итак, идеи?

0 голосов
/ 15 декабря 2009

Вы можете использовать VisualTreeHelper, чтобы пройти по визуальному дереву и найти ListViewItem. Тем не менее, я бы рекомендовал избегать этого подхода, если это возможно. Скорее всего, можно достичь своей цели, используя другие функции WPF, такие как привязка данных.

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