2016-06-06 9 views
0

Ich habe diesen wpf Code für meinen listbox Artikel:Click-Ereignis auf einer Elementvorlage

<ListBox x:Name="icTodoList" ItemsSource="{Binding ListControleMachine}" Grid.Column="3"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="{Binding borderColor }" BorderThickness="2" Margin="0,0,0,1"> 
      <Grid Margin="1"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="30" /> 
        <ColumnDefinition Width="20" /> 
        <ColumnDefinition Width="100" /> 
        <ColumnDefinition Width="120" /> 
        <ColumnDefinition Width="130" /> 
        <ColumnDefinition Width="120" /> 
        <ColumnDefinition Width="120" /> 
        <ColumnDefinition Width="120" /> 
        <ColumnDefinition Width="120" /> 
        </Grid.ColumnDefinitions> 
        <CheckBox x:Name="check_action" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" IsChecked="{Binding ActionCheked,Mode=TwoWay}"/> 
        <Ellipse x:Name="E_Ping" HorizontalAlignment="Left" Fill="{Binding PingDotColor}" Height="10" Width="10" Margin="2,4,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.2,-1.182" Grid.Column="1"/> 
        <TextBlock Text="{Binding titlePing}" Grid.Column="2" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
        <TextBlock Text="{Binding titlePing}" Grid.Column="2" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
        <TextBlock Text="{Binding titleDcai}" Grid.Column="3" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}"/> 
        <TextBlock Text="{Binding titleAd}" Grid.Column="4" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}"/> 
        <TextBlock Text="{Binding FPACtitle}" Grid.Column="5" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
        <TextBlock Text="{Binding titleMcAfee}" Grid.Column="6" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
        <TextBlock Text="{Binding gkUser}" Grid.Column="7" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
        <TextBlock Text="{Binding titleservicestat}" Grid.Column="8" MouseDown="TextBlock_MouseDown" Tag="{Binding ComputerName}" /> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Wie Sie sehen, ich habe ein "TextBlock_MouseDown" auf jeder Textbox

Dann wird die C# -Code.

Ok, so tut es, was ich im Grunde brauche es eine Ansicht mit Daten rebindexed zu ihm.

aber ich bin mir ziemlich sicher, es ist kein sauberer Weg, es zu tun.

erstens ich nicht Ereignis auf jedem Textblock, aber auf dem Listboxitem es selbst (aber ich weiß nicht, wie man Computername Argument auf diese Weise übergeben).

Sekunden und kann mein einziges Problem Biene Ich glaube, ich habe meine Sammlung nicht suchen und meine neue Ansicht mit dieser neu bindet:

DetailedView.DataContext = ListControleMachine.Where(x => x.ComputerName == t.Tag.ToString()); 

für klar sein, wie ein Element Vorlage klicken und eine Ansicht Pop das wird die verbindungsdaten des Listbox-Objekts enthalten?

Antwort

0

versuchen Datacontext auf SelectedItem von List-Box über die Bindung

<DetailedView DataContext="{Binding Path=SelectedItem, ElementName=icTodoList, Mode=OneWay}"/> 

oder gleichwertigen Code

var binding = new Binding 
{ 
    Path = new PropertyPath("SelectedItem"), 
    ElementName = "icTodoList", 
    Mode = BindingMode.OneWay 
}; 
BindingOperations.SetBinding(DetailedView, Control.DataContextProperty, binding); 


ein anderer Ansatz

ListBox hat SelectionChanged Ereignis

<ListBox Name="icTodoList" 
      SelectionChanged="IcTodoList_OnSelectionChanged"> 

</ListBox> 

Ereignishandler

private void IcTodoList_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    DetailedView.DataContext = icTodoList.SelectedItem; 
    DetailedView.Visibility = System.Windows.Visibility.Visible; 
} 

Tag Werte und TextBlock_MouseDown Handler wird nicht nötig sein

+0

duno wo diese Linie Ansicht detailliert setzen ist eine Instanz Detail Usercontrol: Genkai_wpf.Views.mini_controle.detail DetailedView = new Genkai_wpf .Views.mini_controle.detail(); – Zwan

+0

@Zwan, diese Zeile soll xaml sein. aber ich habe auch eine Variante mit Code hinzugefügt. siehe meine Bearbeitung – ASh

+0

gut mit selecteditem ist die Idee, aber kann es nicht auf diese Weise arbeiten; (. – Zwan

Verwandte Themen