C# 刷新Icommand上的Textblock值并调用MVVM(WPF)
朋友们好,我正在使用MVVM桌面应用程序。我的项目中有放置标签 第一次标签是绑定的,但它不会在Icommand调用时刷新标签的值。请帮助我以下是我的代码: //视图模型C# 刷新Icommand上的Textblock值并调用MVVM(WPF),c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,朋友们好,我正在使用MVVM桌面应用程序。我的项目中有放置标签 第一次标签是绑定的,但它不会在Icommand调用时刷新标签的值。请帮助我以下是我的代码: //视图模型 private string _Commentcount=string.Empty; public string CountComment { get { return _Commentcount; } set { if (_Commentcount ==
private string _Commentcount=string.Empty;
public string CountComment
{
get
{
return _Commentcount;
}
set
{
if (_Commentcount == value)
{
return;
}
_Commentcount = value;
RaisePropertyChanged("CountComment");
}
}
public void GetCommentsByThreadID(string ThreadID)
{
BindAllComments.Clear();
List<ProjectTabModel> cmnts = ProjectTabModel.GetCommentsByThread(ThreadID);
ObservableCollection<ProjectTabModel> obsrvblCmnts = new ObservableCollection<ProjectTabModel>(cmnts);
var commentcnt = obsrvblCmnts.Count;
if (obsrvblCmnts.Count > 0)
{
CountComment = cmnts.Count.ToString();
RaisePropertyChanged("CountComment");
foreach (var item in obsrvblCmnts)
{
BindAllComments.Add(item);
}
}
else
{
CountComment = "0";
RaisePropertyChanged("CountComment");
foreach (var item in obsrvblCmnts)
{
BindAllComments.Add(item);
}
}
// return cmnts;
}
//////////XAML/////////////////////
<TextBlock Text="{Binding CountComment,UpdateSourceTrigger=Default, Mode=TwoWay}" Foreground="{Binding ElementName=Projectnamecolor,Path=Foreground}" x:Name="lblcommentcount" Canvas.Left="190" Canvas.Top="300" FontWeight="Bold" FontFamily="segoe_uilight" FontSize="18"></TextBlock>
//在这里,我调用我的方法GetCommentsByThreadID
private class MouseUpCommand : ProjectTabViewModel, ICommand
{
public event EventHandler CanExecuteChanged;
public void Execute(object sender)
{
var e = (MouseButtonEventArgs)sender;
var device = e.MouseDevice.DirectlyOver;
UIElement element = device as UIElement;
while (element != null)
{
string ThreadID = string.Empty;
if (element is TextBlock)
{
var Item = element as TextBlock;
ThreadID = Item.Tag.ToString();
GetCommentsByThreadID(ThreadID);
// ProjectTabViewModel obj = new ProjectTabViewModel();
GlobalThreadID = ThreadID;
List<ProjectTabModel> lst = new List<ProjectTabModel>();
lst = ProjectTabModel.GetThreadDetails(ThreadID);
ThreadDetails(lst);
break;
}
if (element is Canvas)
{
var Item = element as Canvas;
ThreadID = Item.Tag.ToString();
// ProjectTabViewModel obj = new ProjectTabViewModel();
// obj.GlobalThreadID = ThreadID;
GetCommentsByThreadID(ThreadID);
GlobalThreadID = ThreadID;
List<ProjectTabModel> lst = new List<ProjectTabModel>();
lst = ProjectTabModel.GetThreadDetails(ThreadID);
ThreadDetails(lst);
break;
}
if (element is StackPanel)
{
var Item = element as StackPanel;
ThreadID = Item.Tag.ToString();
// ProjectTabViewModel obj = new ProjectTabViewModel();
// obj.GlobalThreadID = ThreadID;
GetCommentsByThreadID(ThreadID);
GlobalThreadID = ThreadID;
List<ProjectTabModel> lst = new List<ProjectTabModel>();
lst = ProjectTabModel.GetThreadDetails(ThreadID);
ThreadDetails(lst);
break;
}
}
}
public bool CanExecute(object parameter)
{
return true;
}
}
输出窗口中是否有错误?@nit否我没有收到任何错误。第一次计数仍保留在标签中,但第二次单击另一个线程时,它不会刷新。您确定您的值正在更改吗?也许您的ObservableCollection始终包含相同数量的ProjectTabModel。您可以删除RaisePropertyChangedCountComment;在你的GetCommentsByThreadID@WiiMaxx我的ObservableCollection不包含重复计数。我已经删除了RaisePropertyChangedCountComment,但无法正常工作。我不知道这意味着什么,请告诉我是谁发出了命令,是某个按钮还是其他ICommandSource控件,还是在代码ICommand.Execute中调用它