2

我正在尝试更新三个 ToggleSwitchesOnContent以及OffContent基于从 UWP 的本地设置缓存(而不是ToggleSwitch.IsOn属性)检索到的值。请注意,我在外部线程上执行此操作。

这是我当前的代码:

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
public async void updateUI()
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        // set Test1 state in UI
        toggleSwitchTest1.OnContent = (Convert.ToBoolean(localSettings.Values["Test1"])) ? "It is: On" : "It is: Off";
        toggleSwitchTest1.OffContent = toggleSwitchTest1.OnContent;

        // set Test2 state in UI
        toggleSwitchTest2.OnContent = (Convert.ToBoolean(localSettings.Values["Test2"])) ? "It is: On" : "It is: Off";
        toggleSwitchTest2.OffContent = toggleSwitchTest2.OnContent;

        // set Test3 state in UI
        toggleSwitchTest3.OnContent = (Convert.ToBoolean(localSettings.Values["Test3"])) ? "It is: On" : "It is: Off";
        toggleSwitchTest3.OffContent = toggleSwitchTest3.OnContent;
     });
}

我也尝试过使用正常值Boolean作为传递给方法的参数来执行此操作。或者Boolean值只是在公共构造函数之前的类开头声明并设置它。这也不起作用。

如果需要任何其他代码,请告诉我。

我究竟做错了什么?

编辑

updateUI通过简单地像这样调用它来调用该方法:updateUI()

编辑 2

ToggleSwitches'XAML 构造函数代码:

<ToggleSwitch x:Name="toggleSwitchTest1" OffContent="It is" OnContent="It is" HorizontalAlignment="Left" Margin="19,84,0,0" VerticalAlignment="Top" IsOn="False"/>
<ToggleSwitch x:Name="toggleSwitchTest2" OffContent="It is" OnContent="It is" HorizontalAlignment="Left" Margin="19,116,0,0" VerticalAlignment="Top" IsOn="False"/>
<ToggleSwitch x:Name="toggleSwitchTest3" OffContent="It is" OnContent="It is" HorizontalAlignment="Left" Margin="19,148,0,0" VerticalAlignment="Top" IsOn="False"/>
4

1 回答 1

2

如果您从未将null价值应用于localSettings.Values["xxx"]. 如果 value 为 null,则该Convert.ToBoolean方法返回 false。所有的 toggleSwitchTestOnConten都将设置为: Off

而且我发现你使用toggleSwitchTest1.OffContent = toggleSwitchTest1.OnContent;它会导致OffContentOnConten成为相同的值。

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
    var value = localSettings.Values["Test1"];
    // set Test1 state in UI
    toggleSwitchTest1.OnContent = (Convert.ToBoolean(localSettings.Values["Test1"])) ? "It is: On" : "It is: Off";
    // toggleSwitchTest1.IsOn = Convert.ToBoolean(localSettings.Values["Test1"]);
    toggleSwitchTest1.OffContent = !(Convert.ToBoolean(localSettings.Values["Test1"])) ? "It is: On" : "It is: Off";

    // set Test2 state in UI
    toggleSwitchTest2.OnContent = (Convert.ToBoolean(localSettings.Values["Test2"])) ? "It is: On" : "It is: Off";
    //  toggleSwitchTest2.IsOn= Convert.ToBoolean(localSettings.Values["Test2"]);
    toggleSwitchTest2.OffContent = !(Convert.ToBoolean(localSettings.Values["Test2"])) ? "It is: On" : "It is: Off";

    // set Test3 state in UI
    toggleSwitchTest3.OnContent = (Convert.ToBoolean(localSettings.Values["Test3"])) ? "It is: On" : "It is: Off";
    //   toggleSwitchTest3.IsOn= Convert.ToBoolean(localSettings.Values["Test3"]);
    toggleSwitchTest3.OffContent = !(Convert.ToBoolean(localSettings.Values["Test3"])) ? "It is: On" : "It is: Off";
});

虽然你可以改变offon满足上面的代码,但它会导致逻辑混乱。我建议您在 xaml 以前的内容上启动和设置,并将IsOn属性与 localsetting 值绑定。

toggleSwitchTest1.IsOn = Convert.ToBoolean(localSettings.Values["Test1"]);

编辑 1

由于这些AppServiceConnection方法无法访问 UI,因此尝试从这样的方法更改 UI(即使使用Dispatcher)也不会产生效果。

而是从ApplicationData.Current.DataChanged您可以通过调用的方法或事件中调用它ApplicationData.Current.SignalDataChange()

于 2018-04-11T09:46:45.297 回答