2017-03-09 5 views
1

Dies ist das DataTemplate.Binden eines Gitters ColumnDefinition width Attribut an eine Eigenschaft funktioniert nicht

<DataTemplate x:Key="Node2Titles3Flds"> 
    <Border BorderBrush="Aqua" BorderThickness="0" Padding="1" Margin="1"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="0"/> 
       <ColumnDefinition Width="{Binding myColumnWidth}"/> 
       <ColumnDefinition Width="1*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" Text="{Binding id}" /> 
      <TextBlock Grid.Column="1" Text="{Binding Name}" Margin="4,0,5,0" TextAlignment="Left"/> 
      <TextBlock Grid.Column="2" Text="{Binding Value}" TextAlignment="Left"/> 
      </Grid> 
    </Border> 
</DataTemplate> 

Und das ist die Eigenschaft:

public string myColumnWidth { get; set; } //using Fody 

Der Code kompiliert und ausgeführt. Das DataTemplate befindet sich in einem ResourceDictionary, das für die Eigenschaft sichtbar ist.

Es gibt ein paar seltsame Dinge passiert:

  • Intellisense nichts anzeigt, während ‚mCol‘ Eingabe des Datatemplate. Die Zusammenstellung hat keinen Einfluss.
  • Die Bindung von MyColumnWidth funktioniert überhaupt nicht.

Der Resource namens ResDict.xaml im Stammordner ist und hier ist der Link

<Window.Resources> 
     <ResourceDictionary Source="ResDict.xaml"> 
    </ResourceDictionary> 
</Window.Resources> 

ich ratlos bin. Irgendwelche Ideen?

Antwort

0

Zu allererst Ihre Immobilie doppelt zu sein, und einen Wert für sie in Datacontext gesetzt (Ansichtsmodell)

Beispiel:

public class MainViewModel 
    { 
     public MainViewModel() 
     { 
      Width = 200; 
     } 
     public double Width { get; set; } 

und in XAML:

<Window.DataContext> 
     <local:MainViewModel /> 
    </Window.DataContext> 
    <Grid ShowGridLines="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="{Binding Width}" /> 
      <ColumnDefinition Width="100" /> 
      <ColumnDefinition Width="100" /> 
     </Grid.ColumnDefinitions> 
    </Grid> 

und das funktioniert gut. Wenn Sie zur Laufzeit anpassen möchten, muss Ihr ViewModel INotifyPropertyChanged implementieren, und die Eigenschaft muss OnPropertyChanged aufrufen.

+0

Danke für die Hilfe. Das Problem wurde behoben, indem einige Teile der Ressourcenwörterbücher neu erstellt wurden. – Neil

0

Das Problem wurde behoben. Ging zurück und redigierte einige Artikel, die nicht korrekt waren. Ich würde es erklären, aber ... es war zu unordentlich.

Verwandte Themen