2012-05-09 55 views
0

我想設置幾個切換按鈕的DataContext,每個切換按鈕將對應於列表的特定元素。這些切換按鈕是靜態的,不是動態生成的,因爲我們想將它們分組在佈局中,而不是將它們全部放在一個區域中。屬性綁定後評估的DataContext綁定 - 導致崩潰

ListOfRoles是一個對象集合,每個對象都有一個IsSelected屬性(類型bool?)和一個名稱。 nameToObject轉換器以轉換器中給出的名稱返回對象。

我的問題是XAML試圖綁定IsSelected之前,它已經評估DataContext綁定,這會引發我們的系統上的異常。它試圖綁定到應用RoleContainerStyle的對象,並崩潰。這裏是XAML:

<Style x:Key="RoleContainerStyle" TargetType="{x:Type MyControls:MyListBoxItem}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type MyControls:MyListBoxItem}"> 
     <Grid> 
      <StackPanel Orientation="Horizontal" > 
      <ToggleButton Content="Driver To Scene" IsChecked="{Binding IsSelected}" DataContext="{Binding ListOfRoles, Converter={StaticResource nameToObject}, ConverterParameter='Driver To'}" HorizontalAlignment="Stretch" Margin="0"  Width="80" Height="40" FontSize="14.667" /> 
      <ToggleButton Content="Driver From Scene" IsChecked="{Binding IsSelected}" DataContext="{Binding ListOfRoles, Converter={StaticResource nameToObject}, ConverterParameter='Driver From'}" HorizontalAlignment="Stretch" Margin="8,0,0,0" Width="80" Height="40" FontSize="14.667" /> 
      </StackPanel> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

我把斷點的轉換器和驗證,它DOES NOT試圖評估IsSelected結合之前輸入的轉換器。

如果我刪除IsSelected綁定,我AM能夠在轉換器內執行的陷阱,因此它似乎與評估的訂單出現問題,除非我失去了一些東西約XAML。

我試着改變XAML中屬性的順序,嘗試使用指定綁定(嵌套標籤)的長形式,而我只是出於想法。

在此先感謝。

回答

0

如果你需要指定的DataContext爲切換按鈕只爲IsSelected財產,如果你的列表總是包含2項,你可以使用這個(沒有測試過,但我希望你的想法):

<Style x:Key="RoleContainerStyle" TargetType="{x:Type MyControls:MyListBoxItem}"> 
<Setter Property="Template"> 
<Setter.Value> 
    <ControlTemplate TargetType="{x:Type MyControls:MyListBoxItem}"> 
     <StackPanel Orientation="Horizontal" > 
     <ToggleButton Content="Driver To Scene" IsChecked="{Binding ListOfRoles[0].IsSelected}" HorizontalAlignment="Stretch" Margin="0"  Width="80" Height="40" FontSize="14.667" /> 
     <ToggleButton Content="Driver From Scene" IsChecked="{Binding ListOfRoles[1].IsSelected}" HorizontalAlignment="Stretch" Margin="8,0,0,0" Width="80" Height="40" FontSize="14.667" /> 
     </StackPanel> 
    </ControlTemplate> 
</Setter.Value> 

注:請不要使用另一個佈局控制一個佈局控制。 (StackPanel裏面網格

+0

我們最終做的是實現[]索引器與名稱的字符串,並重構xaml使用它。該列表包含兩個以上的項目,我們不控制數字索引(NHibernate的b/c)。 – dythim