将Grid ColumnDefinition width属性绑定到Property不起作用

时间:2017-03-09 17:06:14

标签: c# xaml binding

这是DataTemplate。

<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的ResourceDictionary位于根文件夹中,这是链接

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

我很难过。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

首先使你的属性变为double,并在DataContext(viewModel)中为它设置一些值

示例:

  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。

答案 1 :(得分:0)

修正了问题。退回并重新编写一些不正确的项目。我会解释但是......太乱了。