静态绑定工作已编译但未在设计器下编译

时间:2012-04-20 22:45:41

标签: wpf xaml data-binding binding

以下代码在编译时工作正常,但我无法在设计器中使用 Text =“{x:Static local:SomeClass + Limits.Name}”。在这方面的任何帮助将不胜感激!感谢....

namespace StaticTest
{
    public class SomeClass 
    {
        public static class Limits
        {
            public const string Name = "It Works!";
        }
    }
}
<Window
    x:Class="StaticTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StaticTest"
    Title="StaticTest"
    Height="146"
    Width="296"
    WindowStartupLocation="CenterScreen">
    <TextBlock
        Grid.Column="1"
        Grid.Row="1"
        Text="{x:Static local:SomeClass+Limits.Name}" />
</Window>

2 个答案:

答案 0 :(得分:0)

你需要绑定为@ H.B.表示:

<TextBlock Text="{Binding Source={x:Static local:SomeClass+Limits.Name}}"/>

VS2010设计师无法解决这个问题,但它在VS11测试版中运行良好。

答案 1 :(得分:0)

我明白了。事实证明,您需要执行以下操作:

using System;

namespace StaticTest
{
    public abstract class AbstractViewModel<VM, LC>
        where VM : new()
        where LC : new()
    {
        public AbstractViewModel()
        {
            Limits = new LC();
        }

        static AbstractViewModel()
        {
            Instance = new VM();
        }

        public LC Limits { get; private set; }

        public static VM Instance { get; private set; }
    }

    public class MainWindowViewModel :
        AbstractViewModel<MainWindowViewModel, MainWindowViewModel.LimitsClass>
    {
        public class LimitsClass
        {
            public LimitsClass()
            {
                Lots = new MinMax<int>(1, 10);
            }

            public MinMax<int> Lots { get; private set; }
        }        
    }
}


<Window
    x:Class="StaticTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StaticTest"
    Title="StaticTest"
    Height="146"
    Width="296"
    WindowStartupLocation="CenterScreen">
    <Grid>
        <TextBlock
            Text="{Binding Source={x:Static local:MainWindowViewModel.Instance}, Path=Limits.Lots.MaxValue}" />
    </Grid>
</Window>