将Control Control变量绑定到DataContext

时间:2016-06-02 08:01:28

标签: wpf xaml data-binding

我要做的是在我的(xaml)控件资源中创建一个变量,并将其绑定到我的DataContext上的属性(例如ViewModel)。

我愿意加入我的<system:Boolean x:Key="MyVariable" Value={Binding MyDataContextProperty}/> ,就像这样

MyVariable

我知道这是更优雅的方法,例如向DataContext声明public interface InterviewQuestion { int Method(int[] a, int[] b); int Alternative(int[] a, int[] b); bool Test(); } (例如ViewModel)并从那里使用它。但是出于测试原因,我想探索上述方面。

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

  

'Binding'只能在DependencyObject的DependencyProperty上设置。

所以不,<system:Boolean x:Key="MyVariable" Value={Binding MyDataContextProperty}/>无效

可以在参考资料

中声明一个常量bool值
<StackPanel>
    <StackPanel.Resources>
        <system:Boolean x:Key="varBool">
            True
        </system:Boolean>
    </StackPanel.Resources>
    <CheckBox IsChecked="{StaticResource varBool}"/>
</StackPanel>

也可以创建一个特殊的DependencyObject

public class SomeObj: DependencyObject
{
    public static DependencyProperty ValueProperty = 
        DependencyProperty.Register("Value", typeof (bool), typeof (SomeObj), 
        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public bool Value
    {
        get { return (bool)GetValue(ValueProperty); }
        set { SetValue(ValueProperty, value); }
    }
}

绑定将起作用

<StackPanel>
    <StackPanel.Resources>
        <local:SomeObj x:Key="varBool1" Value="True"/>
        <local:SomeObj x:Key="varBool2" Value="{Binding Value, Source={StaticResource varBool1} }"/>
    </StackPanel.Resources>

    <CheckBox IsChecked="{Binding Value, Source={StaticResource varBool1}}"/>
    <CheckBox IsChecked="{Binding Value, Source={StaticResource varBool2}}"/>
</StackPanel>

主要问题是为什么如果已经有MyDataContextProperty

那么这一切