【发布时间】:2018-07-03 04:02:47
【问题描述】:
我正在努力使以下解决方案发挥作用:
C# - 属性
// IsBusy
private bool _IsBusy;
public bool IsBusy
{
get
{
return _IsBusy;
}
set
{
_IsBusy = value;
OnPropertyChanged("IsBusy");
}
}
// IsHidden
private bool _IsHidden;
public bool IsHidden
{
get
{
return _IsHidden;
}
set
{
_IsHidden = value;
OnPropertyChanged("IsHidden");
}
}
C# - MainViewModel(命令操作)
private void OpenManagerConsole()
{
try
{
ShowLoader();
Frame OpenScreen = new Frame();
OpenScreen = homewindow.FindName("Main") as Frame;
OpenScreen.Content = new ManagerConsole();
OpenScreenName = "Manager Console";
HideLoader();
}
catch (Exception ex)
{
throw ex;
}
}
C# - MainViewModel(ShowLoader() 方法)
private void ShowLoader()
{
try
{
IsBusy = true;
IsHidden = false;
}
catch (Exception ex)
{
throw ex;
}
}
XAML - 主视图
<Grid Grid.Row="2">
<Frame x:Name="Main" NavigationUIVisibility="Hidden" Margin="0" BorderBrush="Transparent"/>
</Grid>
<telerik:RadBusyIndicator Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" IsBusy="{Binding IsBusy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
telerik:StyleManager.Theme="Windows8Touch" d:IsHidden="{Binding IsHidden, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
目前,当我启动我的应用程序时,它会在 MainView 中加载一个名为 Main 的嵌套元素,即 Frame。此框架用于显示应用程序不同页面的内容。当我尝试导航到一个名为 Manager Console 的屏幕时,它不会显示忙碌指示符,只会暂停 UI,直到加载 managerconsole 内容。我知道他与 UI 线程有关。我曾尝试为 ShowLoader(); 使用后台工作人员,但似乎找不到正确的方法来应用后台工作人员以使其工作。
任何帮助将不胜感激!
【问题讨论】:
-
您能说明您的属性是如何定义的以及您是如何实现 MainViewModel 的吗?
-
您在 _Show_Loader 中将 IsHidden 设置为 true。在不知道 Telerik Controls 的情况下,这对我来说似乎与直觉相反。我假设您必须将“IsHidden”设置为false。我假设您的 ViewModel 正确引发了 PropertyChangedEvent。
-
P.S.:你在 try/catch 中包围了布尔属性的设置。为什么?什么可能会在那里引发异常?
-
不是
throw ex;更有意义:) -
只是从其他方法复制的正文内容。在这个时间点,我只想让它工作。 @Fildor 这可能是我监督的问题。
标签: c# mvvm telerik busyindicator