绑定到WPF中的属性后面的代码

时间:2015-08-04 19:06:40

标签: c# wpf data-binding properties code-behind

我希望绑定到代码隐藏中的属性。到目前为止,我发现并没有完全帮助我,但它让我到了我的位置。

我要做的是将bool绑定到DataTrigger,以便我可以设置一个" *"编辑内部表时文件夹名称旁边,表示现在可以选择保存。我知道我的事件处理设置正确,因为当我调试属性时,我希望它是值。

从我所见过的一切都应该可行,但大多数例子都与设置文本有关。这是包含引用的绑定的代码块:

<HierarchicalDataTemplate DataType="{x:Type vm:EditableDatabaseNode}" ItemsSource="{Binding Nodes}">
    <StackPanel Orientation="Horizontal">
        <Image Source="Resources\db.png" Style="{StaticResource tvImage}"/>
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Name="tb_modfied" Text=""/>
    </StackPanel>
    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsChanged}" Value="True">
            <Setter TargetName="tb_modfied" Property="Text" Value="*"/>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>

代码块的第8行我遇到了麻烦,以防您无法推断出来。

编辑:如果像我一样,你又懒得阅读评论。该物业是我的代码背后的公共财产。至于绑定相关的错误,有一个NullReferenceException因为绑定没有挂钩任何东西

以下是我的错误所说的:

  

System.Windows.Data错误:17:无法获得&#39; IsChanged&#39;来自&#39;&#39;的值(类型&#39;布尔&#39;) (键入&#39; MainWindow&#39;)。 BindingExpression:路径= IsChanged;的DataItem =&#39;主窗口&#39; (名称=&#39;&#39);目标元素是&#39; ContentPresenter&#39; (名称=&#39; PART_Header&#39);目标财产是“NoTarget&#39; (类型&#39;对象&#39;)TargetInvocationException:&#39; System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.NullReferenceException:未将对象引用设置为对象的实例。

1 个答案:

答案 0 :(得分:3)

这里有两个问题。

首先,您需要从<?php include 'connection.php'; $empty_value_found = false; $file = $_FILES['file']['tmp_name']; $handle = fopen ($file,"r"); while(($fileop = fgetcsv($handle,1000,",")) !==false){ $first = trim($fileop[0]); $last = trim($fileop[1]); $birthday = trim($fileop[2]); $age = trim($fileop[3]); $address = trim($fileop[4]); if ( empty($first) || empty($last) || empty($birthday) || empty($age) || empty($address) ) { $empty_value_found = true; echo "empty field please check"; break; // stop our while-loop } } // now we check - if there no empty values if (!$empty_value_found) { // we can go through our file again and insert values, // code is similar to what you have $sql = mysqli_query($conn,"INSERT INTO `mytable` (first, last, birthday, age, address) VALUES ('$first','$last','$birthday','$age','$address')"); $getdata = "SELECT * FROM mytable"; $results = mysqli_query($conn,$getdata); if(mysqli_num_rows($results) >=1){ echo "<table><tr><th>First</th><th>Last</th><th>Birthday</th><th>Age</th> <th>Address</th></tr>"; } while($row = mysqli_fetch_assoc($results)){ echo "<tr><td>" . $row["first"]. "</td><td>" . $row["last"]. "</td><td>" . $row["birthday"]. "</td><td>" . $row["age"]. "</td><td>" . $row["address"]. "</td></tr>"; } } echo "</table>"; mysqli_close($conn); ?> 代码

中删除Text=""

<TextBlock>内定义的属性优先于任何触发值,因此值不会改变。

您可以在MSDN's page on Dependency Property Precedence

上详细了解相关信息

第二个问题是Trigger本身的绑定。

设置为

<Tag>

这意味着“向后看到可见树,直到找到第一个Binding="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=IsChanged}" 对象,并检查Window属性”。除了我很确定Window类没有名为IsChanged的属性。

您很可能希望绑定到当前项的DataContext,因此您的绑定应该类似于

IsChanged