1

私のxamlファイルには、次のものがあります。

<DataTemplate DataType="{x:Type Configuration:Drivers}">
    <ItemsControl ItemsSource="{Binding Cars}" FontWeight="Normal" />   
<DataTemplate>

<DataTemplate DataType="{x:Type Configuration:Car}">
    <UniformGrid HorizontalAlignment="Stretch" Margin="5,1,5,2" Columns="2">                                              
         <CheckBox IsChecked="{Binding Enabled, UpdateSourceTrigger=PropertyChanged}"/>    
         <CheckBox Visibility="{Binding SaveImage, UpdateSourceTrigger=PropertyChanged}"/>
    </UniformGrid>      
</DataTemplate>   

車ごとに、次のものがあります。 Enabled プロパティがありますが、SaveImage プロパティはありません。

Car
{
   public bool Enabled {}
}

「SaveImage」はグローバルに設定されています。それをバインドする方法がわかりません: DataTemplate 内で SaveImage を bool しますか?

4

3 に答える 3

2

DataTemplatesFindAncestorはカプセル化の境界であるため、常に使用して目的のデータを取得することはできません。良い解決策はViewModel、XAMLにをとして入れてから、グリッドをこれにStaticResource設定するDataContextことです。そうすれば、他のすべてのDataTemplatesが同じ経由でにアクセスできます。LayoutRootStaticResourceDataContextStaticResource

<Window.Resources>
    <local:MyViewModel x:Key="viewmodel" />
    <DataTemplate DataType="{x:Type Configuration:Car}">
        <UniformGrid HorizontalAlignment="Stretch" Margin="5,1,5,2" Columns="2">
            <CheckBox IsChecked="{Binding Enabled, UpdateSourceTrigger=PropertyChanged}"/>
            <CheckBox Visibility="{Binding Source={StaticResource viewmodel}, 
                Path=SaveImage, UpdateSourceTrigger=PropertyChanged}"/>
        </UniformGrid>
    </DataTemplate>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource viewmodel}}">

</Grid>
于 2012-06-15T10:08:28.517 に答える
0

解決策 1: RelativeSource を試して IsCheck を abcestor オブジェクトにバインドすることができます。

{Binding Path=SaveImage, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

解決策 2: プロパティ SaveImage をビューモデル クラス Car に追加し、ref をモデル SaveImage に追加します。これは適切な解決策ではありません。

于 2012-06-15T08:41:51.830 に答える
0

SaveImageが で利用可能な場合DataContext、次のItemsControl方法でバインドできます。

<CheckBox IsChecked="{Binding DataContext.SaveImage, UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"/>
于 2012-06-15T08:34:00.197 に答える