2013-08-28 41 views
0

不太確定如果我以錯誤的方式接近,無法看到解決方案,或者只是在wpf引擎中達到限制。我有一個用戶控件,在一個網格,我正在嘗試設置在控制範圍之內的網格視圖的DisplayMemberBinding,從調用它的控制:將約束表達式傳遞給usercontrol

用戶控件:(剪斷,爲了簡潔)

<UserControl x:Class="MyAssembly.UserControls.IncludedItems"> 
    <Grid> 
     <ListView x:Name="lstViewItems" Grid.Row="0" ItemsSource="{Binding AffectedFiles, FallbackValue={x:Null}}"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Width="90"> 
         <GridViewColumn.HeaderTemplate> 
          <DataTemplate> 
           <DockPanel> 
            <CheckBox Margin="5,2" IsChecked="{Binding Path=DataContext.AllSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, FallbackValue=false}" /> 
            <TextBlock Text="Include?" /> 
           </DockPanel> 
          </DataTemplate> 
         </GridViewColumn.HeaderTemplate> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Grid Width="90"> 
            <CheckBox HorizontalAlignment="Center" IsChecked="{Binding ShouldInclude}" /> 
           </Grid> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn 
         x:Name="gvcDisplayPath" 
         Header="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=ColumnHeader, FallbackValue=Path}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</UserControl> 

所以在gvcDisplayPath我希望能夠設置的DisplayMemberPath,從呼叫控制:

<Window x:localControls="clr-namespace:MyAssembly.UserControls"> 
    <Grid> 
     ... 
     <localControls:IncludedItems DataContext="{Binding FallbackValue={StaticResource vmDesignModel}}" DisplayMemberPath="Catalog" ColumnHeader="Site" /> 
     ... 
    </Grid> 
</Window> 

我曾嘗試在該控件設置代碼隱藏在C tr和OnInitialised方法,基於依賴項屬性,但沒有奏效(因爲dp尚未設置爲該值)。

由於

+1

試圖在設定它更改處理程序的依賴項屬性? (假設您將DisplayMemberPath DP添加到IncludedItems控件 –

+0

您的'gvcDisplayPath'控件是一個'GridViewColumn'對象...'GridViewColumn'對象上沒有'DisplayMemberPath'屬性。請考慮您想要的內容並編輯您的 – Sheridan

+0

@NicholasW謝謝!知道我錯過了什麼,我會在一秒內發佈我的解決方案 – Psytronic

回答

0

我的最終解決方案是鉤到在所述用戶控制的DependencyProperty登記PropertyChangedCallback,並更新從那裏的結合(剪斷爲了簡潔):

public partial class IncludedItems : UserControl { 

    public static readonly DependencyProperty DisplayMemberPathProperty = DependencyProperty.Register("DisplayMemberPath", typeof(string), typeof(TargetedItemView), new UIPropertyMetadata("Item", DisplayMemberPathPropertyChanged)); 

    private static void DisplayMemberPathPropertyChanged(object sender, DependencyPropertyChangedEventArgs e) { 
     IncludedItems view = sender as IncludedItems; 
     if (null == view) 
      return; 

     view.gvcDisplayPath.DisplayMemberBinding = new Binding(view.DisplayMemberPath) { TargetNullValue = String.Empty, FallbackValue = String.Empty }; 
    } 

}