2013-08-31 139 views
1

我正在嘗試將SIDJavnaUstanovaViewModel的Property IsWriteAllowed設置爲TextBox。 我不能這樣做,我嘗試了相對來源,元素名稱,但它不起作用。 我想將IsWriteAllowed屬性設置爲TextBox IsEnabled屬性。 在我有StaticResource的XAML-s中,這個工作正常,但是在這裏,當我設置DataContext programmaticaly時,我無法綁定它。 我已經編程設置的DataContext:綁定到設置爲programmaticaly的DataContext

SIDJavnaUstanovaViewModel definitionvm = new SIDJavnaUstanovaViewModel(); 
definitionvm.FillElements(null); 
Definition definition = new Definition(); // Create new XAML 
definition.DataContext = definitionvm;  // Set its DataContext 
definition.Show(); 

和XAML看起來像這樣:

<src:BaseWindow x:Class="StoreIDCard.Definition" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
DataContext="{Binding RelativeSource={RelativeSource Self}}" // i tried without that, but nothing happens 
xmlns:src="clr-namespace:StoreIDCard.Base" 
xmlns:ComponentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework" 
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 
xmlns:viewmod="clr-namespace:StoreIDCard.ViewModel" 
x:Name="DefinitionWin" 
WindowStartupLocation="CenterScreen" 
ResizeMode="CanMinimize" ShowInTaskbar="True" 
xmlns:my="clr-namespace:StoreIDCard.View" Width="521" Height="494" 
Icon="/StoreIDCard;component/Images/Delhaize.png" IsEnabled="{Binding}"> 
<Grid Height="465" Width="503" > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="476*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <Button Content="{StaticResource save}" Command="{Binding SaveAndUpdate}" Height="34" HorizontalAlignment="Left" Margin="188,411,0,0" VerticalAlignment="Top" Width="133" /> 

    <DataGrid AutoGenerateColumns="False" Block.TextAlignment="Left" Height="331" Visibility="{Binding Path=IsVisible}" ItemsSource="{Binding Path=Elements}" Name="dataGrid2" SelectedItem="{Binding SelectedElement}" VerticalAlignment="Top" HorizontalAlignment="Left" Width="371" UseLayoutRounding="True" VerticalScrollBarVisibility="Auto" Margin="73,53,0,0"> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn Header="{StaticResource name}" Width="320"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
         <TextBox Text="{Binding Naziv, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Background="{Binding BackgroundColor}" 

    IsReadOnly="{Binding Path=IsReadonly}" 
////CANNOT SET ISWRITEALLOWED HERE, TRIED EVERYTHING 
IsEnabled="{Binding Path=IsWriteAllowed, RelativeSource={RelativeSource Self}}"/> 
        </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
      <DataGrid.ContextMenu> 
       <ContextMenu> 
// ISWRITEALLOWED WORKING PERFECTLY Here 
        <MenuItem Command="{Binding Delete}" IsEnabled="{Binding Path=IsWriteAllowed}" Header="{StaticResource delete}"/> 
        <MenuItem ClipToBounds="True" Command="{Binding Add}" Header="{StaticResource add}"/> 
       </ContextMenu> 

回答

1

您提供的答案ed是正確的,但我想我會提供另一種選擇。如果您使用.NET 4或更高版本,則可以使用x:Reference標記。

我可以看到你的根窗口命名爲DefinitionWin,所以您可以使用X:參考像這樣:

IsEnabled="{Binding DataContext.IsWriteAllowed, Source={x:Reference DefinitionWin}}" 

這從去旅行可視樹緩解WPF。

+0

是的,我試過了,它也在工作,似乎是更好的解決方案。謝謝。 – DukeNukem