【问题标题】:Caliburn.micro Mouseclick update TextBlockCaliburn.micro Mouseclick 更新 TextBlock
【发布时间】:2012-08-23 17:10:15
【问题描述】:

我还在学习 Caliburn.micro,所以这可能是一个愚蠢的问题。 我有一个 ListView,里面有一个 GridView。我希望能够单击一行并让它更改 ListView 之外的 TextBlock 的文本。

<TextBlock x:Name="titleText" Grid.Row="6" Grid.Column="4" Text="View a report of all current applications" TextWrapping="Wrap" Margin="5" VerticalAlignment="Center" FontWeight="Bold" />


    <ListView VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="listView1" SelectedItem="{Binding Key}" ItemContainerStyle="{DynamicResource CustomListViewItemStyle}" AlternationCount="2" 
              ItemsSource="{Binding}" DataContext="{StaticResource OrderGroup}" Grid.Column="2" Grid.Row="10" Grid.ColumnSpan="5" Height="200"  cal:Message.Attach="[Event MouseLeftButtonUp]=[Action HandleClick($eventArgs)]">
        <ListView.View>
            <GridView AllowsColumnReorder="False" x:Name="GridView1">
                <GridViewColumn Header="Client Name" DisplayMemberBinding="{Binding Path=ClientName}" ></GridViewColumn>
                <GridViewColumn Header="Application ID" DisplayMemberBinding="{Binding Path=ID}" ></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

如您所见,我正在调用 cal:Message.Attach 来处理 MountLeftButtonUp 事件。

这会调用以下代码:

public void HandleClick(RoutedEventArgs e)
    {
        titleText= "SOME TEST HERE"; 
    }

并且titleText(我要更新的TextBlock)定义如下:

String _titleText = "";
    public string titleText
    {
        get { return _titleText; }
        set
        {
            if (_titleText != value)
            {
                _titleText = value;
                NotifyOfPropertyChange(() => _titleText);
            }
        }
    }

但是,这不会更新 TextBlock。单步进入代码,看到代码中titleText发生了变化,但是没有显示出来。 我也将其更改为仅在单击图像时执行相同的操作,并且成功运行。

那么这里有什么我可能遗漏的吗?任何有 Caliburn.micro 经验的人。

谢谢。

乱七八糟

【问题讨论】:

  • 我对 Caliburn 没有太多经验,但应该是:NotifyOfPropertyChange(()=&gt;titleText)? IE。属性,而不是私有成员?
  • 编码大猩猩!感谢您发现显而易见的!我想我已经看了很久了,我什至没有注意到它!谢谢!我的愚蠢!

标签: c# wpf caliburn.micro


【解决方案1】:

解决方案由 Coding Gorilla 提供 - 我在 titleText 声明中错过了它。它应该调用属性而不是私有成员 - 就​​像这样:

String _titleText = "";
    public string titleText
    {
        get { return _titleText; }
        set
        {
            if (_titleText != value)
            {
                _titleText = value;
                NotifyOfPropertyChange(() => titleText);
            }
        }
    }

改变了它并且它起作用了 - 所以只是我没有看到问题的一个例子。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多