C# 刷新WPF页面
我编写了一个应用程序,用于查看为该公司编写的自定义应用程序的日志。我使用实体模型进行了设置,并希望根据菜单选择动态更改正在访问的数据库(测试数据库或生产数据库)。我尝试过使用EntityConnectionStringBuilder,它似乎可以正常工作,但我无法获得显示更改数据连接字符串后要更新的应用程序列表的网格。(测试服务器和生产服务器的连接字符串存储在properties.settings中)以下是切换到测试服务器的方法C# 刷新WPF页面,c#,wpf,C#,Wpf,我编写了一个应用程序,用于查看为该公司编写的自定义应用程序的日志。我使用实体模型进行了设置,并希望根据菜单选择动态更改正在访问的数据库(测试数据库或生产数据库)。我尝试过使用EntityConnectionStringBuilder,它似乎可以正常工作,但我无法获得显示更改数据连接字符串后要更新的应用程序列表的网格。(测试服务器和生产服务器的连接字符串存储在properties.settings中)以下是切换到测试服务器的方法 try { XDocument doc = XDocument.
try
{
XDocument doc = XDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
var query1 = from p in doc.Descendants("connectionStrings").Descendants()
select p;
foreach (var child in query1)
{
foreach (var atr in child.Attributes())
{
if (atr.Name.LocalName == "name" && atr.Value == "AppsEntities")
if (atr.NextAttribute != null && atr.NextAttribute.Name == "connectionString")
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(atr.NextAttribute.Value);
entityBuilder.ProviderConnectionString = Properties.Settings.Default["TestServer"].ToString();
atr.NextAttribute.Value = entityBuilder.ToString();
}
}
}
doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
lblDatabase.Content = "Connected to the Test Server";
}
catch (Exception ex)
{
MessageBox.Show("changing connection string to Test - blew up!" + ex.Message, "massive error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
如果有任何帮助,我将不胜感激。我是C#和WPF的新手,所以我可能不会以正确的方式进行
<telerik:RadGridView x:Name="LogApplicationGrid"
Width="900"
Height="Auto"
Margin="2,53,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
AutoGenerateColumns="false"
GridLinesVisibility="Horizontal"
IsReadOnly="true"
MouseDoubleClick="LogApplicationGrid_MouseDoubleClick"
ShowGroupPanel="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn MaxWidth="50"
DataMemberBinding="{Binding AppID}"
Header="AppID"
IsFilterable="False"
UniqueName="appNumber" />
<telerik:GridViewDataColumn MaxWidth="300"
DataMemberBinding="{Binding AppName}"
Header="Application Name" />
<telerik:GridViewDataColumn MaxWidth="350"
DataMemberBinding="{Binding AppDesc}"
Header="Application Description" />
<telerik:GridViewDataColumn MaxWidth="150"
DataMemberBinding="{Binding DateCreated}"
Header="Date Created"
IsFilterable="False" />
<telerik:GridViewCheckBoxColumn MaxWidth="100"
DataMemberBinding="{Binding ShowInSharePoint}"
Header="SharePoint"
IsFilterable="False" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
将GridView绑定到一个
可观测集合
,然后要更新网格数据,只需更新集合即可
使用ObservableCollection
而不是列表
,因为它会在集合更改时自动提醒UI需要更新它
另外,请确保您正在绑定该值,而不是设置它。设置该值会将该值设置为数据实例,而不是实际数据本身,因此它不会响应更改
例如,这不会更新UI
LogApplicationGrid = SomeCollection;
SomeCollection = GetObservableCollection();
但这会
var b = new Binding();
b.Source = SomeCollection;
LogApplicationGrid.SetBinding(RadGridView.ItemsSourceProperty, b);
SomeCollection = GetObservableCollection();
这也会
<telerik:RadGridView ItemsSource="{Binding SomeCollection}" ... />
将GridView绑定到一个
可观测集合
,然后要更新网格数据,只需更新集合即可
使用ObservableCollection
而不是列表
,因为它会在集合更改时自动提醒UI需要更新它
另外,请确保您正在绑定该值,而不是设置它。设置该值会将该值设置为数据实例,而不是实际数据本身,因此它不会响应更改
例如,这不会更新UI
LogApplicationGrid = SomeCollection;
SomeCollection = GetObservableCollection();
但这会
var b = new Binding();
b.Source = SomeCollection;
LogApplicationGrid.SetBinding(RadGridView.ItemsSourceProperty, b);
SomeCollection = GetObservableCollection();
这也会
<telerik:RadGridView ItemsSource="{Binding SomeCollection}" ... />
如果您已经验证了连接确实发生了切换,那么这听起来更像是一个数据绑定问题,您应该为XAML发布相关的XAML和DataContext
。当我说它似乎可以工作时-Visual Studio在debog模式下不会捕获任何错误,然而,我对此并不熟悉-App.config文件似乎永远不会改变,如果这有帮助的话。我分别使用每个连接字符串运行应用程序,它们都可以工作,因此我同意这是上面发布的代码或绑定。GridView从哪里获取数据?理想情况下,它的ItemsSource
应该绑定到DataContext
中的一个集合,要更新网格,只需更新集合即可。我将数据拉入一个列表,并在InitializeComponents()之后将其附加到ItemsSource好的,在进一步调试之后,我确定connectString没有得到更新-有人知道您是否有两个相同的数据库-您可以使用相同的实体模型并来回更改连接字符串吗?我开始认为这不是一个好主意。如果您已经验证了连接确实发生了切换,那么这听起来更像是一个数据绑定问题,您应该为XAML发布相关的XAML和DataContext
。当我说它似乎可以工作时-Visual Studio在debog模式下不会捕获任何错误,然而,我对此并不熟悉-App.config文件似乎永远不会改变,如果这有帮助的话。我分别使用每个连接字符串运行应用程序,它们都可以工作,因此我同意这是上面发布的代码或绑定。GridView从哪里获取数据?理想情况下,它的ItemsSource
应该绑定到DataContext
中的一个集合,要更新网格,只需更新集合即可。我将数据拉入一个列表,并在InitializeComponents()之后将其附加到ItemsSource好的,在进一步调试之后,我确定connectString没有得到更新-有人知道您是否有两个相同的数据库-您可以使用相同的实体模型并来回更改连接字符串吗?我开始觉得这不是一个好主意。非常感谢您的回复。我已经将事情更改为ObservableCollection,通过逐行返回代码,我发现ConnectionString没有得到应有的更新…非常感谢您的回复。我已经将事情切换到ObservaleCollection,通过逐行返回代码,我发现ConnectionString没有得到应有的更新。。。