2015-02-05 111 views
1

我需要幫助來綁定wpf上的一些東西。 我有這列文本框,顯示Datagrid中屬性的值。如何將文本框的長度綁定到文本塊?

<DataGridTemplateColumn Header="Value" Width="150"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate>    
      <TextBox Width="150" Name="PropertyTextBox" Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding Path=Property, Converter={StaticResource isSimpleJPropertyConverter}, Mode=OneWay}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

我需要顯示在另一列文本框的實際長度,如果我改變文本框的文本長度也必須改變。

<DataGridTemplateColumn Header="Leng" Width="150"> 
<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock Width="150" Text="{Binding Path=Text.Length, ElementName=PropertyTextBox, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

爲什麼這不工作?有小費嗎?我該怎麼做?

編輯:全XAML

<Window x:Class="WpfInterceptor.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Name="this" 
    xmlns:local="clr-namespace:WpfInterceptor" 
    Title="MainWindow" Height="728" Width="755" Loaded="Window_Loaded"> 
<Window.Resources> 

    <!--<local:JPropertyConverter x:Key="jPropertyConverter" />--> 
    <local:IsSimpleJPropertyConverter x:Key="isSimpleJPropertyConverter" /> 
    <local:LengthConverter x:Key="lengthConverter" /> 

</Window.Resources> 
<Grid DataContext="{Binding ElementName=this}"> 

    <Button x:Name="btn6" Content="Vai a Host" HorizontalAlignment="Left" Margin="662,172,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/> 
    <TextBox x:Name="txt1" HorizontalAlignment="Left" Height="157" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="727"/> 
    <RadioButton x:Name="rb2" Content="MID" HorizontalAlignment="Left" Margin="305,175,0,0" VerticalAlignment="Top" Checked="rb2_Checked"/> 
    <RadioButton x:Name="rb1" Content="JSON" HorizontalAlignment="Left" Margin="246,175,0,0" VerticalAlignment="Top" Checked="rb1_Checked"/> 
    <Button x:Name="btn5" Content="Clear" HorizontalAlignment="Left" Margin="582,172,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> 

    <StackPanel> 
    <DataGrid x:Name="dg" HorizontalAlignment="Left" Margin="10,199,0,0" VerticalAlignment="Top" Height="46" Width="727" /> 

     <DataGrid x:Name="dg2" ItemsSource="{Binding Path=Properties}" AutoGenerateColumns="False" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.IsDeferredScrollingEnabled="True" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" Height="350" IsEnabled="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding Path=NomeCampo}" Header="Nome Campo" IsReadOnly="True" /> 
       <DataGridTextColumn Binding="{Binding Path=Lunghezza}" Header="Lunghezza" IsReadOnly="True" Width="50" /> 

       <DataGridTemplateColumn Header="Valore" Width="150"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Canvas Background="Azure"> 
           <!-- <TextBox Name="PropertyTextBox" Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> seconda--> 
           <TextBox Width="150" Name="PropertyTextBox" Text="{Binding Path=Property.Value.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding Path=Property, Converter={StaticResource isSimpleJPropertyConverter}, Mode=OneWay}" /> 
           <!--<TextBox Width="250" Text="{Binding Path=Property, Converter={StaticResource jPropertyConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged , Delay=500}" /> prima versione--> 
          </Canvas> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

       <!--<DataGridTextColumn Header="Lunghezza2" IsReadOnly="True" Width="50" Binding="{Binding Path=Property.Value.Value.Length, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, Converter={StaticResource lengthConverter}}" />--> 
       <DataGridTextColumn Header="Lunghezza2" IsReadOnly="True" Width="50" Binding="{Binding Path=Lunghezza2, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" /> 


       <DataGridTemplateColumn Header="Leng" Width="150"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Width="150" Text="{Binding Path=PropertyTextBox.Text.Length, ElementName=PropertyTextBox, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

      </DataGrid.Columns> 
     </DataGrid> 

    </StackPanel> 

    <Button x:Name="btn2" Content="Mostra Campi" HorizontalAlignment="Left" Margin="90,172,0,0" VerticalAlignment="Top" Width="91" Click="Button_Click_2"/> 
    <Button x:Name="btn3" Content="Apri file" HorizontalAlignment="Left" Margin="10,172,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_3"/> 
    <Button x:Name="btn4" Content="Accetta Modifiche" HorizontalAlignment="Left" Margin="406,172,0,0" VerticalAlignment="Top" Width="171" Click="Button_Click_4" IsEnabled="False"/> 

</Grid> 

+0

請張貼滿XAML – 2015-02-05 14:03:24

+0

加滿XAML – Federico 2015-02-05 14:37:45

回答

1

的DataGrid列不在相同的視覺樹。因此,您無法使用ElementName進行綁定。

綁定屬性從你的模型對象,因爲它已經雙向綁定文本框具有:

<DataTemplate> 
    <TextBlock Width="150" Text="{Binding Path=Property.Value.Value.Length}" /> 
</DataTemplate> 
+0

已經嘗試過這樣的:沒有工作。當我更改TextBox文本時,其他TextBlock中的長度沒有變化 – Federico 2015-02-05 14:13:39

+0

我已經在小樣本中嘗試過它,它絕對爲我工作。你是否正確設置路徑,因爲在發佈的代碼中,似乎你正在使用'XPath'代替'Path'? – 2015-02-05 14:54:54

+0

我試過Xpath或者Path,其中沒有一個可以工作 – Federico 2015-02-05 14:57:21