【问题标题】:How to use self as the DataContext in a Silverlight MVVM application?如何在 Silverlight MVVM 应用程序中使用 self 作为 DataContext?
【发布时间】:2023-03-27 15:51:01
【问题描述】:

在我的 Silverlight MVVM 应用程序中,在视图的代码隐藏中,我将 DataContext 设置为这样的视图模型:

this.DataContext = new MyViewModel();

但是,我需要将视图中的一个控件绑定到同一视图中的另一个。因此,我需要设置控件的 DataContext,以便将绑定添加到视图本身。

浏览之后,似乎在 WPF 中执行此操作的最终方法是添加:

DataContext="{Binding  
    RelativeSource={RelativeSource FindAncestor,  
    AncestorType={x:Type UserControl}}

到控件。

但是,Silverlight 4 中不存在 AncestorType 属性。在 Silverlight 中是否有用于此方案的等效、确定的代码行?我没有遇到任何显示最佳实践的网站或答案。

这可以帮助我回答earlier question,我正在尝试在视图中绑定自定义控件和属性。

【问题讨论】:

    标签: binding silverlight-4.0 mvvm datacontext


    【解决方案1】:

    你能解释一下你想做什么吗?

    也许你可以使用ElementName from Binding class

    这是来自msdn page 的示例:

    <Border Margin="10" BorderBrush="Silver" BorderThickness="3" Padding="8">
      <DockPanel>
        <TextBlock>Choose a Color:</TextBlock>
        <ComboBox Name="myComboBox" SelectedIndex="0">
          <ComboBoxItem>Green</ComboBoxItem>
          <ComboBoxItem>Blue</ComboBoxItem>
          <ComboBoxItem>Red</ComboBoxItem>
        </ComboBox>
        <Canvas>
          <Canvas.Background>
            <Binding ElementName="myComboBox" Path="SelectedItem.Content"/>
          </Canvas.Background>
        </Canvas>
      </DockPanel>
    </Border>
    

    【讨论】:

    • 问题是我想绑定到一个控件,而不仅仅是一个控件的属性。我创建了自己的控件,它扩展了 BusyIndi​​cator 以具有 Control 类型的额外属性。目标是当 BusyIndi​​cator 失去焦点时,我在绑定到的控件上调用 Focus() 命令。但是,我无法在 XAML 中为我的额外属性设置控件,并认为它与 DataContext 相关。请参阅我的相关@​​987654323@。
    • 哦,我明白了 - 抱歉,但我仍然不完全理解您的问题。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2023-03-16
    • 2010-11-24
    • 1970-01-01
    • 2011-09-13
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多