如何从Caliburn.Micro ViewModel创建文本框ReadOnly?

时间:2012-11-29 07:13:20

标签: c# windows-phone-7 mvvm caliburn.micro

我开始使用Caliburn.Micro在WP 7.1上编程应用程序。我的起始视图是一个记录窗口,其中包含登录和传递文本框以及具有登录操作的按钮。现在我想在顶部显示进度条为不确定,并将文本框设置为readOnly。我一直在网上搜索,发现只是没有令我满意的解决方案。我正在考虑这样的解决方案:

  1. 按照约定更改默认活页夹以绑定属性,例如“ControlNameIsReadOnly”“ControlNameIsEnabled”
  2. 将屏幕设为对话框,仅显示进度条
  3. 有人解决了这个问题吗?这些解决方案都没有令我满意。

1 个答案:

答案 0 :(得分:0)

有几种方法 - 取决于你是否想要基于常规和每次控制

如果没有约定,您可以使用繁忙的属性,例如

class SomeViewModel : Screen // or whatever
{
    public bool IsBusy 
    {
        get { // getter code 
        } 
        set { // setter code, calling notifypropertychanged 
        }

}

然后在你的控制中

<UserControl>
    <Grid>
        <TextBox>Hello World</TextBox>
        <Border Background="#AAFFFFFF"> <!-- Semitransparent overlay -->
            <ProgressBar IsIndeterminate="true" Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibilityConverter}" />
        </Border>
    </Grid>
</UserControl>

您的转换器可能如下所示:

class BooleanToVisibilityConverter : IValueConverter
{
    public void Convert(object value, blah blah blah...)
    {
        if(value is bool)
        {
            if((bool)value) return Visibility.Visible;

            return Visibility.Collapsed;
        }

        return null;
    }
}

这样,您可以在控件上发生事情时覆盖进度条,这样用户就无法进行交互。

你可能需要调整以获得最佳效果,因为我没有测试过任何一个:P

您甚至可以将文本框上的IsReadOnly绑定到IsBusy属性。这当然是假设您不介意使用非传统方法,并且它都可以在Windows Phone 7上运行:)