gpt4 book ai didi

c# - ToggleSwitch.On & Off内容未更新

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:04 25 4
gpt4 key购买 nike

我正在尝试根据从 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 值只是在类的开头在公共(public)构造函数之前声明并设置它。这也不起作用。

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

我做错了什么?

编辑

我通过像这样简单地调用它来调用 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"/>

最佳答案

如果您从未将值应用于 localSettings.Values["xxx"],它将获得 null 值。如果值为 null,则 Convert.ToBoolean方法返回假。所有的 toggleSwitchTest OnConten 都将设置为 It is: 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 值绑定(bind)。

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

编辑 1

由于 AppServiceConnection 方法无法访问 UI,因此尝试通过这样的方法更改 UI(即使在使用 Dispatcher 时)不会有影响。

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

关于c# - ToggleSwitch.On & Off内容未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com