1

我现在有一个标签按钮的新问题。下面的代码将视图绑定到视图模型:

<Label Name="isImageValid"  Content="Image not Created" Margin="0,7,1,0" Style="{StaticResource LabelField}"
                Grid.ColumnSpan="2" Grid.Row="15" Width="119" Height="28" Grid.RowSpan="2"
                Grid.Column="1" IsEnabled="True" 
                Visibility="{Binding isImageValid}" />

以下是我的 ViewModel 中的代码:

 private System.Windows.Visibility _isImageValid;
 public System.Windows.Visibility isImageValid
        {

            get
            {

                return _isImageValid;
            }
            set
            {


                _isImageValid = value;
               this.RaisePropertyChanged(() => this.isImageValid);

            }
        }
  private void OnImageResizeCompleted(bool isSuccessful)
    {

        if (isSuccessful)
        {

            this.SelectedStory.KeyframeImages = true;
            isImageValid = System.Windows.Visibility.Visible;
        }
        else
        {
            this.SelectedStory.KeyframeImages = false;

        }
    }

在调用“OnImageResizeCompleted”之前,该标签应保持隐藏状态,但由于某种原因,该图像始终可见。请问我需要改变什么来隐藏它?

4

2 回答 2

3

您的问题不在于实际的绑定模式,标签不需要双向绑定,因为它通常不设置其来源。

正如@blindmeis 建议的那样,您应该使用转换器而不是直接从视图模型返回可见性值,您可以使用框架中内置的一个。您还应该确保您的数据上下文设置正确,如果不是,则标签将无法绑定到指定的属性。您在同一个窗口上是否有其他项目正确绑定到视图模型?您还应该检查您的输出窗口是否有绑定错误——它们会在那里被提及。最后,您还应该检查您的财产是否正确通知 - 从您提供的代码中无法判断。

您的控件/窗口应该看起来像这样

<UserControl    x:Class="..."
                x:Name="MyControl"

                xmlns:sysControls="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"

                >   
    <UserControl.Resources> 
        <sysControls:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    </UserControl.Resources>

    <Grid>
        <Label  Visibility="{Binding IsImageValid, Converter={StaticResource BooleanToVisibilityConverter}}" />
    </Grid>
</UserControl>

和 C#:

public class MyViewModel : INotifyPropertyChanged
{

    public bool IsImageValid 
    {
        get { return _isImageValid; }
        set 
        {
            _isImageValid = value;
            OnPropertyChanged("IsImageValid");
        }
    }

    protected void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private bool _isImageValid;
}
于 2012-05-09T07:32:49.337 回答
0

尝试将绑定模式设置为双向

<Label  Visibility="{Binding isImageValid, Mode=TwoWay}" />

不过我不会在视图模型中使用 System.Windows 命名空间。创建一个 bool 属性并在绑定中使用 booltovisibility 转换器。

于 2012-05-09T07:05:01.433 回答