单击XAML绑定

时间:2010-08-29 11:36:05

标签: c# wpf xaml binding

继续我的last question,我想知道如何在点击按钮时绑定(这可以通过纯XAML完成吗?) - 或者更简单地说,我该如何进行类似XAML的绑定通过C#代码?

编辑:上一个包含信息的问题:

我想创建一个列表框,该列表框将绑定到XPath,相对于其他列表框的当前所选项目。

它使用XmlDataProvider作为数据,XML文件如下所示:

<Programs>
    <Program name="...">
        <Step name="..."/>
        <Step name="..."/>
    </Program>
    <Program name="another">

    ...

</Programs>

因此,“父”列表框列出了所有程序,而“子”仅显示当前程序的步骤。 我只需要一个关于这种类型的绑定的事实的指针。

提前致谢。

上一个问题的结尾

问题是 如何进行一次性绑定(我不希望绑定在用户点击另一个列表框后立即更改item)当按下一个名为“Load”的按钮时?

2 个答案:

答案 0 :(得分:1)

将Command属性绑定到实现ICommand的属性。

假设您有一个对象(ViewModel),其属性“ICommand HelloCommand {get {...};}”被设置为数据上下文:

<Button Content="Hello" Command="{Binding HelloCommand}"/>

单击按钮时将调用ICommand实现的Execute方法。 CanExecute方法应返回命令是否可用并确定按钮的启用状态。

还有一些辅助类和框架可以使这更简单(和/或更复杂)。

答案 1 :(得分:1)

让我们从一个示例开始,只要用户选择主列表框中的项目, 的详细信息列表框就会改变:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <XmlDataProvider x:Key="Programs">
      <x:XData>
        <Programs xmlns="">
          <Program name="Some program">
            <Step name="Some program step 1"/>
            <Step name="Some program step 2"/>
            <Step name="Some program step 3"/>
            <Step name="Some program step 4"/>
          </Program>
          <Program name="Some other program">
            <Step name="Some other program step 1"/>
            <Step name="Some other program step 2"/>
            <Step name="Some other program step 3"/>
            <Step name="Some other program step 4"/>
          </Program>        
        </Programs>
      </x:XData>
    </XmlDataProvider>
  </Page.Resources>
  <DockPanel>  
    <Label DockPanel.Dock="Top">Programs</Label>
    <ListBox x:Name="Program" DockPanel.Dock="Top" ItemsSource="{Binding Source={StaticResource Programs}, XPath=/Programs/Program}">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding XPath=@name}"/>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
    <Label DockPanel.Dock="Top">Steps</Label>
    <ListBox x:Name="Step" DockPanel.Dock="Top" DataContext="{Binding ElementName=Program, Path=SelectedItem}" ItemsSource="{Binding XPath=Step/@name}"/>
  </DockPanel>
</Page>

只有在用户点击按钮时才需要更改细节才能更改细节?一件事:名为DataContext的{​​{1}}上的ListBox。您需要使用代码隐藏来执行此操作,但代码非常简单:

Step

修改

要使上述功能正常运行,您必须将private void Button_Click(object sender, RoutedEventArgs e) { if (Program.SelectedItem != null) { Step.DataContext = Program.SelectedItem; } } Step更改为:

ListBox

<ListBox x:Name="Step" DockPanel.Dock="Top" ItemsSource="{Binding XPath=Step/@name}"/> 除非已分配ListBox,否则不会显示任何内容。