2017-03-09 79 views
1

这是DataTemplate。将网格ColumnDefinition宽度属性绑定到属性不起作用

<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> 

这是属性:

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

的代码编译和运行。 DataTemplate位于属性可见的ResourceDictionary中。

有几个奇怪的事情发生了:在打字中的DataTemplate“MCOL”

  • IntelliSense不显示任何内容。汇编没有任何影响。
  • myColumnWidth的绑定完全不起作用。

的资源字典命名ResDict.xaml是在根文件夹,这里是链接

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

我难倒。有任何想法吗?

回答

0

首先让你的房产是双,并且在DataContext的设定某一值时,它(视图模型)

例如:

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

,并在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> 

和这工作得很好。如果你想在运行时调整,那么你的ViewModel需要实现INotifyPropertyChanged,属性需要调用OnPropertyChanged。

+0

感谢您的帮助。通过重做资源字典的某些部分来解决问题。 – Neil

0

修复了这个问题。退回并重新发送一些不正确的项目。我会解释,但是......太乱了。