2012-04-04 8 views
0

와 목록 상자하기 나는 다음과 같은 templete입니다에게이바인딩 관찰 목록 templete입니다 목록 상자 항목

<ControlTemplate x:Key="tmpl_btn_TecnicianModeMenu" TargetType="{x:Type ListBoxItem}"> 
<Grid Opacity="1" d:LayoutOverrides="Width, Height"> 
    <Border 
     x:Name="Border" 
     CornerRadius="0" 
     BorderThickness="0" Height="Auto" Margin="0" Background="White"> 

     <StackPanel Name="stackPanel" Height="Auto" Margin="0" Orientation="Horizontal" > 
      <Button x:Name="button" Style="{DynamicResource ButtonListBoxItem}" Margin="5,5,5,5" Width="120" Height="Auto" BorderThickness="0" > 
       <TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="בצע" Margin="12,0" VerticalAlignment="Center" HorizontalAlignment="Stretch" Style="{DynamicResource tb_Desc}"/> 
      </Button> 
      <StackPanel Height="Auto" Margin="0" Orientation="Horizontal" > 
       <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_Result" Text="LB_Result" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height" /> 
       <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_OK" Text="LB_OK" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height" /> 
       <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_TchName" Text="LB_TchName" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5"/> 
       <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_Date" Text="LB_Date" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5" d:LayoutOverrides="Height"/> 
       <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" x:Name ="LB_CheckName" Text="{TemplateBinding Tag}" Style="{DynamicResource LB_AreaTitle_Balance}" Margin="5,5,5,5"/> 
      </StackPanel> 
     </StackPanel> 
    </Border> 
    <Border x:Name="Divide" BorderBrush="Gray" BorderThickness="0,0.5" Height="140" Width="Auto" Margin="18.5,0" VerticalAlignment="Bottom"/> 
</Grid> 
<ControlTemplate.Triggers> 
    <Trigger Property="IsKeyboardFocused" Value="True"/> 

    <Trigger Property="IsEnabled" Value="false"> 
     <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
    </Trigger> 
</ControlTemplate.Triggers> 

** 내가 같은 항목의 목록 상자가 있습니다. 관찰 가능 목록에 바인딩하고 싶습니다. **

private void AddButtonToList(String LB_CheckName, String LB_Date, String LB_TchName, String LB_OK, String LB_Result, enmTechMode_Check enmCheck) 
    { 
     try 
     { 
      //create item 
      ListBoxItem item2 = new ListBoxItem(); 
      //set template 
      item2.SetResourceReference(ListBoxItem.TemplateProperty, "tmpl_btn_TecnicianModeMenu"); 
      item2.ApplyTemplate(); 

      item2.Height = 45; 

      TextBlock txt1 = (TextBlock)item2.Template.FindName("LB_CheckName", item2); 
      txt1.Text = LB_CheckName; 

      txt1 = (TextBlock)item2.Template.FindName("LB_Date", item2); 
      txt1.Text = LB_Date; 

      txt1 = (TextBlock)item2.Template.FindName("LB_TchName", item2); 
      txt1.Text = LB_TchName; 

      txt1 = (TextBlock)item2.Template.FindName("LB_OK", item2); 
      txt1.Text = LB_OK; 

      txt1 = (TextBlock)item2.Template.FindName("LB_Result", item2); 
      txt1.Text = LB_Result; 

      Button bt = (Button)item2.Template.FindName("button", item2); 
      bt.SetResourceReference(Button.StyleProperty, "ButtonListBoxItem"); 
      bt.ApplyTemplate(); 

      bt.Click += new RoutedEventHandler(Item_Selected); 
      //set tag 
      bt.Tag = enmCheck; 

      //add to list 
      StackPanel sp = (StackPanel)ListBoxData.FindName("stackPanel"); 
      item2.Tag = enmCheck; 
      sp.Children.Add(item2); 

     } 
     catch (Exception exp) 
     { 
     } 
    } 

내가 어떻게 프로그래머가의 사용으로 가정 가정이

을 해결하는 단서가 없다 : 문제가 previus의 프로그래머는 다음과 같이 목록에 항목을 추가 한 것입니다 컨버터? 나에게 방향을 알려주세요.

나는 관측 가능한리스트가 구조체라고 가정합니다. 그러나 그것들을 사원 형식의 항목으로 변환하는 방법은 무엇입니까?

답변

1

템플릿에서 일반적으로 데이터 개체의 bind to properties이됩니다. 예를 들어 당신이

public class MyData 
{ 
    public string Result { get; set; } 
    ... 
} 

Result 속성을 아래의 데이터 클래스가있는 경우이 같은 결합하는 것입니다 : 그럼 당신은 수동으로 ListBoxItems을 추가 할 것

<TextBlock Text="{Binding Path=Result}" ... /> 

, 대신 ObservableCollection에 데이터 개체를 추가,

myDataObjects.Add(
    new MyData 
    { 
     Result = "A Result" 
     ... 
    }); 

myDataObjects는입니다 :리스트 박스의 ItemsSource 속성은 바인딩되는.

이미 ObservableCollection에 포함 된 데이터 객체가 변경 될 때 UI를 업데이트해야하는 경우 클래스 MyDataINotifyPropertyChanged을 구현해야합니다.

+0

myData 형식은 무엇입니까? 구조체? – Nahum

+0

무슨 뜻인지 확실치 않습니다. 대답과 같이 공공 재산이있는 수업이 될 것입니다. – Clemens

+0

종속 속성이 아닙니까? – Nahum